入れ子になっているムービークリップのイベントハンドラの両立
ボタンが複数配置されていて、ドラッグして動かせるメニューのようなものを作っていて問題にぶつかってしまいました。。。
親ムービークリップにonPressイベントハンドラ等のボタンイベントを設定すると、子のボタンイベントが発生しなくなりました。
サンプル
- ドラッグできるムービークリップインスタンス
- 図のmc1のように、子にボタン用のmcを配置します
- インスタンス名:「mc1」
- ボタン(ムービークリップインスタンス)
- 図のmc2、mc3のように、ドラッグできるムービークリップの中に配置します
ActionScript
(_rootのフレームアクション)
//ドラッグ mc1.onEnterFrame = function(){ this.onPress = this.startDrag; this.onRelease = this.stopDrag; this.onReleaseOutside = this.onRelease; }
(ボタンのフレームアクション)(ボタンごとにgetURLの引数の値は変わります)
this.onRelease = function(){ getURL("hoge.html"); }
ボタンの種類は数種類なのですが、条件によってボタンの種類や数・配置のパターンが200近くあったので、1つ1つのボタンにアクションを書くには避け、ムービークリップボタン内のフレームアクションにしました。
で、結局どうしたかというと、「ドラッグさせる」+「ボタンが機能する」を実現させるために、mc1と同じ大きさの透明のインスタンスをドラッグさせて、それにmc1がついていく動作にしました。
修正後のサンプル
ActionScript
(_rootのフレームアクション)
//ドラッグ mcDrag.onEnterFrame = function(){ this.onPress = this.startDrag; this.onRelease = this.stopDrag; this.onReleaseOutside = this.onRelease; mc1._x = this._x; mc1._y = this._y; }
(ボタンのフレームアクションは変更無し)