入れ子になっているムービークリップのイベントハンドラの両立

ボタンが複数配置されていて、ドラッグして動かせるメニューのようなものを作っていて問題にぶつかってしまいました。。。

ムービークリップにonPressイベントハンドラ等のボタンイベントを設定すると、子のボタンイベントが発生しなくなりました。

サンプル

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;
}

(ボタンのフレームアクションは変更無し)

参考リンク

直接関係ないけど、ドラッグに関するリンク