- ベストアンサー
ムービー上の特定の座標上でマウスオーバーした場合に特定の処理をする方法
- 特定の座標上でマウスオーバーがあった場合に特定の処理を実行する方法を教えてください。
- 具体的な例として、y座標が0から100の範囲、x座標が0から600の範囲内にマウスがある場合に特定のMCの動きを制限し、関数fly()を実行したいです。
- _rootのフレームアクション内に条件分岐やスクリプトを書くことで、この処理を実現できると思います。具体的なスクリプトについて教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ステージ上の特定の領域(四角形)であれば、マウスカーソルの位置を見て、その座標が範囲内にあるかどうかで判断してはいかがでしょう。 _root._xmouse と _root._ymouse プロパティを見ると、ステージの左上を基準とするマウスカーソルの座標を取得できます。この座標が、( 0 , 0 ) - ( 600 , 100 )の範囲内にあるかどうかを判断するスクリプトは、 if ( _root._xmouse >= 0 && _root._xmouse <= 600 && _root._ymouse >= 0 && _root._ymouse <= 100 ) { ・・・ } このようになります。 (インデントの都合上、スクリプトの一部に全角のスペースが入っています。コピーして使う時は、半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) 上記の方法では、指定の範囲内にカーソルがある間、常に if 文が実行されてしまいます。 指定の範囲内にカーソルが入った時1度だけ処理をさせたい場合は、ヒット領域用のムービークリップを作り、アルファを0にしてステージに置いておき、このムービークリップでの RollOver イベントを利用すると簡単です。 ムービークリップを利用すると、四角形だけでなく、円や不定形などの複雑な形のヒット領域を作れるという利点もあります。 仮に、ヒット領域用の hit_area というムービークリップがあるとすると、 hit_area.onRollOver = function () { ・・・ }; このような処理をフレームアクションで定義します。 なお、RollOver イベントを利用するアクションを定義すると、該当するムービークリップの上にカーソルが乗った時に手のカーソルに変わってしまいますので、load イベントを利用して、予め hit_area.useHandCursor = false; というアクションを実行しておくといいでしょう。ムービークリップの上にカーソルが乗っても、手のカーソルに変わらなくなります。
お礼
ありがとうございます。 座標をうまく取得できてなんとか思い通りの動作を実現することができました。 サンプルスクリプトまでご提示していただきまして、 ありがとうございました。 感謝いたします。