• ベストアンサー

ActionScript2.0での座標

ActionScript2.0で、_xmouse、_ymouse でマウス座標を得られますが、_xmouse、y_mouseで得られる座標の単位はいくつになるのでしょうか? _xmouse、_ymouseを画面に出力してみると、起動するフォーム(ムービーのデバック実行時のウィンドウ)の場所によっては、マイナスの値になったりするのですが、起動するフォームの場所によって値が相対的に変わるものなのでしょうか? Windowsのスクリーン座標(0-65535)とは何が違うのかご存知の方がいましたらご教授願います。

noname#62873
noname#62873
  • Flash
  • 回答数2
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

スミマセン。 動作検証などしていたら補足していただいたことに対する回答がすっかり遅れてしましました。 http://okwave.jp/qa4145944.html http://oshiete1.goo.ne.jp/qa4145944.html の#1です。 以下は, このご質問(今ご覧になっている QNo.4150064 ActionScript2.0での座標 の質問)の, #1の回答者の方の回答と書き方が違うだけでほぼ同じなので, #1の回答者の方の回答と合わせて参考にしてみてください。 ~~~~~~~~~~~~~~~~~~~~~ 新規ドキュメントでも何でも良いので, 次のスクリプトをフレーム1にコピペして「ムービープレビュー」や「ムービーのデバッグ」してみます。 ------------------------------------ // マウス座標表示用テキストフィールドの作成 var t0:TextField = _root.createTextField("x_txt", _root.getNextHighestDepth(), 10, 10, 60, 20); var t1:TextField = _root.createTextField("y_txt", _root.getNextHighestDepth(), 10, 40, 60, 20); // // テキストフィールドの設定 for (var i:Number = 0; i<=1; i++) { _root["t"+i].border = true; _root["t"+i].background = true; _root["t"+i].backgroundColor = 0xD7D7D7; } // // 1フレーム進む時間毎に毎回マウス座標を表示 _root.onEnterFrame = function():Void { t0.text = "X:"+_root._xmouse; t1.text = "Y:"+_root._ymouse; }; ------------------------------------ Windows環境(WindowsXP),Flash8 では, 少なくともDebug Player ウィンドウの場所によって値が相対的に変わるということも, _root._xmouse も _root._ymouse もマイナスになることもありません。 ただし,わざとウィンドウの大きさを変更すると マウスポインタの位置によってはマイナスの値にはなりますが, これは,ステージの左上よりもさらに上や左が表示されるからです。 ステージいっぱいに何色かの色で塗りを作成すればわかりやすくなります。 ------------------------------------ // ステージ全体を枠線付き薄青で塗る _root.beginFill(0xCCFFFF, 100); _root.lineStyle(0, 0xA0A0A0, 100); _root.moveTo(0, 0); _root.lineTo(Stage.width, 0); _root.lineTo(Stage.width, Stage.height); _root.lineTo(0, Stage.height); _root.lineTo(0, 0); _root.endFill(); // // マウス座標表示用テキストフィールドの作成 var t0:TextField = _root.createTextField("x_txt", _root.getNextHighestDepth(), 10, 10, 60, 20); var t1:TextField = _root.createTextField("y_txt", _root.getNextHighestDepth(), 10, 40, 60, 20); // // テキストフィールドの設定 for (var i:Number = 0; i<=1; i++) { _root["t"+i].border = true; _root["t"+i].background = true; _root["t"+i].backgroundColor = 0xD7D7D7; } // // 1フレーム進む時間毎に毎回マウス座標を表示 _root.onEnterFrame = function():Void { t0.text = "X:"+_root._xmouse; t1.text = "Y:"+_root._ymouse; }; ------------------------------------ ただ,Windows版 Flash と Mac版 Flash とでは, ムービープレビュー時のマウス検知の動向が違うとは聞いたことがあります。 と言いますか, Mac版 Flash でのムービープレビュー が, HTML に貼り付けたときのマウス検知などの結果と違うそうです。 だから Mac版 だと一度 SWF と HTML をパブリッシュしてみて, その HTML をブラウザで見てみないとわからないこともあるらしいです。 Windows版でも当然そのようなことはありますが(FlashVarsとかの動向など), マウスの座標やステージ外に出たとか出ないとかの検知に関しては, ムービープレビューもブラウザ閲覧も変わりません。 Mac Windows に関わらず, XP と Vista での違いや Flash8 とそれ以外との違いなど, 仕様の違いが関係しているのかもしれません。   

noname#62873
質問者

お礼

毎回のご返答有難うございます。また、具体的に説明していただき有難うございます。大変勉強になります。 勝手な意見ですが、例えば開発ツールが私のようなプログラミング初心者でも取り掛かりやすいように予め、 「_xmouse、_ymouseを使うとマウスの座標を取得することができるんですよ 。」という意味も含めて開発さ れた開発ツールと考えると私自身は、「仕様の違いでは?」という言葉にとても納得がいきます。 FLASH以外でいうとVisualBasicからも同じ印象を受けます。 ただ、プログラミングを知っている方々に「仕様の違いでは?」ということを伝えると間髪いれず「そうで はないんだよ」という声が圧倒的に多く返されます。 いろいろな意味に捉えることができるのですが例えば、 ・開発ツールなのだから_xmouse、_ymouseは良いのだけれどもこの方法以外でも実現可能でしょう。 ・もっとよく調べて下さい。どうしても_xmouse、_ymouseを使わなければならないなら、「なぜか」まで調べて下さい。 ・_xmouse、_ymouseを使わなければならないならプログラミング界では「開発ツール」とは普通いわないよね。 ・もっとはっきりとした説明が欲しいし、その説明を受ける方法があるなら示して下さい。 等です。 完全に愚痴になってしまいましたが、「知る」と楽しくなる一面もあるのでこれからも精進します。

その他の回答 (1)

  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

swf ファイルは、ウィンドウ( HTML の場合は指定された幅と高さ)に合わせて拡大・縮小して表示することも、ウィンドウの大きさに合わせずムービーの原寸のまま表示することもできます。 「ムービープレビュー」および「ムービーのデバッグ」では、ウィンドウの大きさに関係なく、ムービーの大きさは原寸で固定されて表示されます。 従って、プレビューウィンドウがムービーよりも大きい場合はムービーの周りに余白が付き、ムービーよりもウィンドウの方が小さい時はムービーの端が表示領域からはみ出している状態で表示されます。 窓から見える景色は変わらないけれど、窓の大きさを変えると見える範囲が広がったり狭まったりするのと同じ、というところでしょうか。 ActionScript でマウスカーソルの座標を扱う時は、一般的には _root の _xmouse と _ymouse プロパティを参照します。 _root は通常はムービーそのもののことですので、_root._xmouse と _root._ymouse でステージの左上を原点とするマウスカーソルの位置が分かります。 ただし、「ムービープレビュー」「ムービーのデバッグ」では、先述の通り、プレビューウィンドウの大きさとムービーの大きさによってはステージの周りに余白が付いていたり、ムービーの端が切れている状態で表示されていることがあります。 つまり、プレビュー中は、ウィンドウの左上=ステージの左上となるように表示されているとは限りません。 それでも、_root._xmouse と _root._ymouse は、あくまでもステージの左上を原点とする座標です。 ですから、プレビューウィンドウの方がステージよりも大きく、ステージの周囲に余白ができている状態の時は、ステージの左端や上端を超える部分にカーソルを置くと、カーソルの座標はマイナスの値になります。 これは、ステージと同じ大きさでステージの背景色とは違う色の四角形を1つ、ステージにぴったり合わせて配置して「ムービープレビュー」または「ムービーのデバッグ」で見てみると、よく分かります。 プレビューウィンドウを大きくして余白が付く状態にした場合は、背景として置いた四角形の左上が( 0 , 0 )になり、これよりも左側および上側の余白部分にマウスカーソルを出すと、カーソルの座標はマイナスの値になります。 プレビューウィンドウがムービーよりも小さい時は、ステージの左上がウィンドウの外にはみ出していることがあります。 この場合は、_root._xmouse と _root._ymouse は、ウィンドウ外にあるステージの左上から見たマウスカーソルの座標になります。 このように、プレビューウィンドウの大きさによってステージの左上が表示される位置が変わってしまうために、マウスカーソルの座標も変わっているように見えるということはあるのですが、ウィンドウの表示位置そのものとは関係ないはずです。 Windows で画面の描画に使う座標と、Flash や ActionScript で扱うステージの座標は全く別のもので、Flash では Flash の中だけで通用する独自の基準に基づいた座標を扱います。

noname#62873
質問者

お礼

有難うございます。初心者の私にとっては大変勉強になります。

関連するQ&A

  • ActionScript2.0

    ActionScript2.0で、_xmouse、_ymouse でマウス座標を得られますが、_xmouse、y_mouseで得られる座標の単位はいくつになるのでしょうか? _xmouse、_ymouseを画面に出力してみると、起動するフォームの場所によっては、マイナスの値になったりするのですが、起動するフォームの場所によって値が相対的に変わるものなのでしょうか?

    • ベストアンサー
    • Flash
  • ActionScript2.0での座標について

    「ActionScript2.0で、_xmouse、_ymouse でマウス座標を得られますが、_xmouse、y_mouseで得られる座標の単位はいくつになるのでしょうか? _xmouse、_ymouseを画面に出力してみると、起動するフォームの場所によっては、マイナスの値になったりするのですが、起動するフォームの場所によって値が相対的に変わるものなのでしょうか?」 以前このような質問をした者です。ご回答もいただき、自分でも調べてみて_root._xmouse や _root._ymouse と書けば、ステージの左上のコーナーが_rootの基準点になることは理解できたのですが、ステージに依存しない座標を取得する方法はありますでしょうか。

    • ベストアンサー
    • Flash
  • FlashのActionScript詳しい方お願いします

    Flashで波紋が広がっていくようなムービーのスクリプトなのですが、うまく行きません。 スクリプトが間違っているのだと思うのですが、一応本を参考に同じように入力したつもりですのでどこが間違っているのかが分かりません。 デバックしたら下のようなメッセージが出るのですが、「;」をどこかに入れたらいいのでしょうか? 『 シーン = シーン 1, レイヤー = mouse, フレーム = 1 : 行 9:';' が必要です。 onClipEvnet(mouseMove) { 』 ----------------------------------------- 以下が記述したスクリプトです。 onClipEvent(load){ if(_name== "mc"){ max=10;//複製する個数 for(i=0; i<max; i++){ this.duplicateMovieClip(i,100+i);//複製 } } } onClipEvnet(mouseMove) { if(_name=="0"){//一つ目のmcはマウスの座標とする _x=_parent._xmouse; _y=_parent._ymouse; }else{//それ以降は自分の名前から-1引いたインスタンス名の座標を取得する _x=_parent[int(_name)-1]._x; _y=_parent[int(_name)-1]._y; } updateAfterEvent(); }

  • Suzkaでダイナミックテキストに座標を表示

    FLASH Suzkaで作成しています。 ダイナミックテキストに座標を表示させたいのですが、 下記のサイトを参考にしましたが、うまくいきません。 http://orange.2-d.jp/flash/action/20_mouse_xy_get_preview.html ↓「FLASHでの座標取得」-過去記事-教えて!goo http://oshiete1.goo.ne.jp/qa1087211.html x座標とy座標を表示させるためのダイナミックテキストと、 スプライト1を用意してこのように並んでいます。 スプライト1 x座標 y座標 スプライト1には、下記のスプリクトを記入しました。 onClipEvent (enterFrame) { _root.x=_root._xmouse; _root.y=_root._ymouse; } あと、過去記事を読むとダイナミックテキストをムービークリップにと 書いていたので、ムービークリップ=スプライト?(Suzuka)と解釈して x、y座標のダイナミックテキストを、それぞれスプライトにして試しましたが うまくいきませんでした。 Suzukaで座標をダイナミックテキストに表示する方法を 教えてください。 宜しくお願いします。

    • ベストアンサー
    • Flash
  • [Flash]actionscript2.0を用いて歯車を作りたいのですが

    Adobe FLASH CS2を使い2つのかみ合った歯車を制作しています。 ドラッグで片方の歯車を回転させると もう片方の方は逆回転になるはずですが、 うまいことactionscriptをかくことができません。 片方はこのようなactionscriptを使っているのですが うまい作り方はないでしょうか。 よろしくおねがいします。 on (press) { //このMCの基準点からのマウス座標を取得 rx0 = _root._xmouse-this._x; ry0 = _root._ymouse-this._y; //このMCの基準点とマウスとの距離を算出 td0 = Math.sqrt(rx0*rx0+ry0*ry0); //マウスによる回転の差分を算出 tr0 = (Math.PI/2+Math.atan2(ry0, rx0))*180/Math.PI-this._rotation; //onEnterFrame を定義 this.onEnterFrame = function() { //現在のMCの基準点からのマウス座標を取得 rx1 = _root._xmouse-this._x; ry1 = _root._ymouse-this._y; //このMCの回転を計算 this._rotation = (Math.PI/2+Math.atan2(ry1, rx1))*180/Math.PI-tr0; //このMCの移動を計算 }; } on (release, releaseOutside) { //この onEnterFrame を削除 delete this.onEnterFrame; }

  • マウスを追いかける

    ムービークリップがマウスを追いかけるというようにしたいのですが、追いかけるムービークリップが別のシンボルの中にあると座標がずれるようで、このずれをなくしたいのですがどのようにすればよいのでしょうか? 詳しくは、シーン1にシンボル(ただの図形と追いかけてほしいムービー:mc1)を置いて、mc1に下記のスクリプトを書きました。 -------------------------------------------- onClipEvent (load) { _root.mc1.startDrag(true); x = _root._xmouse; y = _root._ymouse; } onClipEvent (enterFrame) { _x += (_root._xmouse-_x)/4; _y += (_root._ymouse-_y)/4; } --------------------------------------------

    • ベストアンサー
    • Flash
  • 外部swfを読み込んだときだけMouse.hide();させたい。

    よろしくお願いします。 ドキュメント上に空のムービークリップを作り、その中の入れ子のボタンを押すと外部swfを表示するflashを作ったのですが、その外部swf、仮にhoge.swfを読みこんで、そのときだけマウスを隠して(ムービークリップをマウス代わりに)、ボタンで違う外部swf、仮にogeをよみこんだときはマウスを表示させることは可能でしょうか? onClipEvent (enterFrame) { this._x=_root._xmouse; this._y=_root._ymouse; Mouse.hide(); } 上記のスクリプトでマウスを消すと、ogeを読み込んでもマウスが消えっぱなしです。 多分if文を使って if (hogeを読み込んだら){ this._x = _root._xmouse; this._y = _root._ymouse; Mouse.hide(); } //そうでなかったら、 else { Mouse.show(); } みたいな感じなのでしょうが、うまく機能しません・・・。 ご教授お願い致します。

    • ベストアンサー
    • Flash
  • マウスカーソルについてくる前に左上にいってしまう。

    こんにちは。 マウスカーソルについてくるムービークリップをマスクにして使用したいため、 目的のムービークリップに onClipEvent (enterFrame) { _x += _xmouse/3; _y += _ymouse/3; } というActionScriptを入れました。 きちんと思うように動くのですが、 読み込んだあと、一瞬まず左上に移動してしまいます。 マウスカーソルをうごかして、はじめてマウスカーソルに近づいてきます。 左上に移動してしまうのは格好が悪いので、配置した位置からマウスカーソルに近づいて欲しいのですが、色々調べてもその説明がありません。 どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • このスクリプトでIFが意味を為さないのはなぜですか?

    このスクリプトでIFが意味を為さないのはなぜですか? フリーソフトのSuzukaでマウスでドラッグして絵を描くものを作っています 基本的にはAdobeのものと同じのようです AS3です ウィンドウの左上に張り付いた300*300のマスのなかにだけ書けるようにしたく、 if(0<=_xmouse<=300 && 0<=_ymouse<=300) と加えたのですが全く変化が感じられません 何故でしょうか? if(0<=_xmouse && _xmouse<=300 && 0<=_ymouse && _ymouse<=300)としても変わらず、 ダイナミックテキスト及びトレースで _xmouse, _ymouse が0以上300以下であることを確認しています if以外の間違いということはないと思うのですが・・・ 以下スクリプトです タブを全角スペース2つに置き換えています this.onMouseDown = function(){   //直線を定義 太さ:5,濃紺   lineStyle(5,0x0000BB);   //始点を定義   moveTo(_xmouse,_ymouse);   zahyo.text = "x,y = " + _xmouse + ","+ _ymouse;   //画数に+1   h += 1;   //マウスを動かしたら   onMouseMove = function(){     //現在の座標まで描画     lineTo(_xmouse,_ymouse);     //テキスト同期     zahyo.text = "x,y = " + _xmouse + ","+ _ymouse;     //配列の最後尾に追加     this["xh"+ h + "list"].push( _xmouse );     this["yh"+ h + "list"].push( _ymouse );   };   //マウスが上がったら   onMouseUp = function(){     //描画終了     delete onMouseMove;     //配列をトレース     trace( this["xh"+ h + "list"] );     trace( this["yh"+ h + "list"] );     //次の配列を定義     this["xh"+ (h+1) + "list"] = new Array();     this["yh"+ (h+1) + "list"] = new Array();   }; }; よろしくお願いします

    • ベストアンサー
    • Flash
  • マウスの移動方向によってマウスカーソルの画像を切り替えたい

    今、マウスカーソルを(右向きの)車の画像にしています。 マウスを右方向に動かしたら、右方向の車の画像にし、逆に左方向に動かしたら左方向の車の画像に切り替える、という処理は可能でしょうか?可能である場合、どのようなスクリプトを書けばよいのでしょうか? マウスのx座標の値の増減で判断する、ということは想像できるのですが、書き方が分かりません。 右向きの車の画像のムービークリップ「car」のインスタンスには、下のスクリプトを記述しています。 onClipEvent (load) { Mouse.hide(); } onClipEvent (mouseMove) { this._x = _root._xmouse; this._y = _root._ymouse; updateAfterEvent(); } バージョンはMXです。 どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash

専門家に質問してみよう