- ベストアンサー
ムービークリップ内のボタンが作動しない問題について
- Flash初心者の方がムービークリップに配置したボタンが作動しない問題に悩んでいます。
- スクリプトを記述し、オンマウスによるスライド動作を表現したムービークリップの中にボタンを配置しても、そのボタンがまったく作動しない状況です。
- 質問者は相対パスが正しく記述されていると述べており、ボタンをうまく機能させる方法を知りたいとのことです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
◎原因 on (release) { } などの onイベントハンドラ が2個以上重なった場合, 上にあるものの onイベントハンドラ が優先になります。 例えば, on (release) { } を書いた「ボタンA」と「ボタンB」があったとして, 「ボタンA」の方が「ボタンB」より上のレイヤーにあって, さらに「ボタンA」と「ボタンB」が座標的に重なっていれば, 「ボタンA」の on (release) { } が優先的にはたらきます。 このご質問の場合は, MC(ムービークリップ)の中にボタンがあるわけですから, MCを横から見たイメージ断面図を描くと次のようになります。 実際には横から見ることができないので単なるイメージだけの世界ですが...。 ↓MC「on (rollOver) や on (rollOut) が書いてある」 ■■■■■■■■■■■■■■■■■■■■ ■□□□□□□□□□□□□ ボタン □□□■ ■■■■■■■■■■■■■■↑■■■■■ on (release) などが書いてある そういうわけで, MCに書いた onイベントハンドラ が勝ってしましますから, その中のボタンの onイベントハンドラ は無効になってしまいます。 ◎ 対処法 onイベントハンドラ の重なりが悪いわけですから, どちらかの onイベントハンドラ を取ってやる必要がでてきます。 そして,取った代わりに他の物で代用します。 このご質問の場合は, ボタンの onイベントハンドラ だけでなく, ボタンとしての機能(オーバーフレームに行ったり,ダウンフレームに行ったりする機能)も残す必要がありそうなので, MC の方の onイベントハンドラ を他のもので代用した方が簡単だと思います。 「他のもの」は場合によって変わりますが, この場合は,MC と マウスカーソルの当たり判定を取る方法が良いと思います。 ご質問で書かれているスクリプトを, 次のように書き替えれば,MC の中のボタンはボタンとして機能するようになると思います。 ////////////////////////////////////////////////////// onClipEvent (load) { var div:Number = 0.5; var move_to:Number = 730; // 変数 flag の初期値を設定 var flag:Boolean = false; this._x = 730; } onClipEvent (enterFrame) { // この MC が マウス とヒットしていれば if (this.hitTest(_root._xmouse, _root._ymouse, true)) { // なおかつ flag が false であれば if (!flag) { this.move_to -= 100; // 即 flag を true にする flag = true; } // この MC が マウス とヒットしていなくて flag が true であれば } else if (flag) { this.move_to += 100; // 即 flag を false にする flag = false; } this._x += (move_to-this._x)*div; } ////////////////////////////////////////////////////// 加算後代入演算子(+=) や 減算後代入演算子(-=)が使われているため, flag などを立てつ必要性が出てきて,少し複雑になってしまいました。
お礼
sassakun様、素早いご回答ありがとうございます。 ご指摘いただいたようにスクリプトを書き換えましたところ イメージどうりの動作を実現することができました。 また非常に丁寧な解説を頂きましたので 何が原因だったのかもすぐ理解することができました。 今後、どうしても自力で解決できない問題にぶつかった時は またよろしくお願い致します。 今回は本当にありがとうございました。