- ベストアンサー
FLASHでの座標取得
マウスが動くたびに変数としてテキストボックスにいれるにはどのようなアクションスクリプトをかけばいいのでしょうか? 以下のようにしてみましたができませんでした。 シーン上のフレーム1のところのレイヤーが何もない箇所に以下のアクションスクリプト onClipEvent(mouseMove){ Zahyox = _xmouse; hensuu = Zahyox; } でも何も出てきません。 座標取得をやるのは初めてで、どこへかけばいいのかすらわかってないので、よろしくお願いします。 FLASH5です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
マウスが動いた時に発生する mouseMove イベントは、ムービークリップのイベントです。利用するにはムービークリップが必要です。 変数を表示するためのテキストボックスをムービークリップにすれば、mouseMove イベントを検出できるようになるだけでなく、X座標とY座標の両方を表示するにも1つのシンボルを再利用でき、一石二鳥です。 「テキスト」ツールでテキストボックスを作成したら、「テキストオプション」パネルでタイプを「ダイナミックテキスト」にし、「変数」の項目に、内容を表示したい変数の名前を入力します。ここでは仮に、変数名を coordinate とします。 このテキストボックスを、ムービークリップに変換します。テキストボックスには、ムービークリップが持っている coordinate という変数の内容が表示されることになります。 このムービークリップのインスタンスを2つステージに配置して、次のようなスクリプトを設定してみてください。Y座標を表示するには、_xmouse を _ymouse に変更します。 onClipEvent(mouseMove) { //ステージの左上を原点とするマウス座標を取得 coordinate = _root._xmouse; } (↑このスクリプトをコピーして利用する場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) カーソルの位置は _xmouse と _ymouse プロパティを見ると分かります。 ただし、_root._xmouse とした時はステージの左上を ( 0 , 0 ) とするカーソルの座標が、インスタンス名._xmouseとした時は指定のインスタンスの中心点を ( 0 , 0 ) とするカーソルの座標が返ってきます。 onClipEvent アクションの中でターゲットパスを省略すると、this._xmouse と同じ意味になります。つまり、そのムービークリップの中心点を原点とするカーソルの座標になります。 なお、ムービークリップの中心点というのは、インスタンスにある+マークが表示されている点のことです。 座標を表示することが目的ではない場合も、発想は同じです。 Flash MX 以降であれば _root.onMouseMove = function () ・・・としてフレームに定義しておけるところですけれど、Flash 5 ではこの方法は利用できません。mouseMove イベントを利用するには、必ずムービークリップが必要になります。 既にステージにあるムービークリップを、どれか1つ借りてもいいのですが、mouseMove イベント検出専用のダミーのムービークリップを配置しておくのも1つの手です。 ムービークリップのインスタンスであれば、何でも構いません。適当なシンボルを1つ作ってもいいですし、実際に作品で使っているシンボルのインスタンスでも結構です。 ムービークリップインスタンスのアルファを0%にして、ステージのどこかに置いておきます。 このムービークリップに onClipEvent(mouseMove) を設定して _xmouse や _ymouse プロパティを参照すると、マウスが動く度にカーソルの座標を取得することができます。
その他の回答 (2)
- teddy1014
- ベストアンサー率34% (17/50)
No.2の方が言われている通り、「mousuMove」イベントはムービークリップのイベントですので、ステージにムービークリップを配置する必要があります。 >「シーン上のフレーム1のところのレイヤーが何もない箇所に」 と言われていますが、意味がいまいち理解出来ません。 「あるレイヤーのフレーム1のところに」と言う事でしょうか?。でも、onClipEventはムービークリップインスタンスでのみ利用出来るので、フレームアクションではエラーになるはずです。 ・レイヤー1の1フレームに適当な位置にダミーのムービークリップを配置。(縦横1x1の透明なムービーで良い) インスタンス名を「aaa」とする。 ・同じくダイナミックテキストエリアを2個配置。 変数名を「hensuu_x,hensuu_y」とする。(注:インスタンス名ではありません。必ず変数名に指定してください。) ・「aaa」のムービーアクションとして、 onClipEvent(mouseMove) { _root.hensuu_x = this._xmouse ; _root.hensuu_y = this._ymouse ; } _root.の代わりにthis._parent.でも構いません。 これで、マウスを動かす毎にダイナミックテキストエリアに表示されます。(実際に試しましたから間違いありません。) 今、気付きました。No.2で回答されている方はDPEさんで、私もいつもお世話になっている方です。DPEさんの回答をCopy&Pasteされて試されたら良いですね。
お礼
回答ありがとうございます。 >「あるレイヤーのフレーム1のところに」と言う事でしょうか? はい、そうです。 エラーは出ませんでしたが、何も反応しなかったです。 #2の方の方法で無事解決しました。 ありがとうございました。
- comuru
- ベストアンサー率30% (9/30)
おつかれさまです。。 FLASH関連なら参考URLのサイトが便利です。 Have Fun! GAC http://www.gac.jp/
- 参考URL:
- http://www.gac.jp/
お礼
便利なサイトですね。 今後も活用したいと思います。 ありがとうございました。
お礼
回答ありがとうございます。 スクリプトを貼り付ける箇所を間違えていたんですね。 無事座標を取得できました。 ありがとうございました。