mouseEnabledの設定で発生する不要なRollOutイベントの制御方法

ben

押されたボタンを選択状態にして、ロックするボタン群を作ることは
多々あると思いますが、理想通りにはいかずに問題がでてきます。

選択されたボタンをロックするために
mouseEnabledでボタン機能を停止させますが
mouseEnabledに反応して余計なイベント発生します。


例えばボタンからマウスが離れるイベント。
mouseEnabled=false時に
MouseEvent.ROLL_OUTイベントが発生してしまい
ロックされたボタンのはずなのにROLL_OUTイベントが発生して
元の状態に戻ってしまいます。


RollOverイベントが発生してしまうパターン

btn.addEventListener( MouseEvent.ROLL_OVER , onOver );
btn.addEventListener( MouseEvent.ROLL_OUT , onOut );
btn.addEventListener( MouseEvent.CLICK , onPrs );
private function onOut(e:MouseEvent):void {
	// ROLL_OUTアクション
}
 
private function onOver(e:MouseEvent):void {
	// ROLL_OVERアクション
}
private function onPrs(e:MouseEvent):void {
	var tg:Sprite = e.target as Sprite;
	tg.mouseEnabled = false;
}

こういった場合の解決方法を今までは時間差を作りだして
解決してきましたが、最近単純な方法がわかりました。

問題のあるイベントを削除してしまえばよい
それだけでした。

 

修正版

private function onPrsDel(e:MouseEvent):void {
	var tg:Sprite = e.target as Sprite;
	tg.mouseEnabled = false;
	tg.removeEventListener( MouseEvent.ROLL_OUT , onOut  );	
}

This movie requires Flash Player 9

[通常]リスナーを削除しない場合
[修正版]リスナーを削除して、選択状態で固定出来る


単純ですがリスナー自体を切るという方法が確実ということでした。

Filed under AS3, 問題解決メモ · Tagged with

Speak Your Mind

Tell us what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!

You must be logged in to post a comment.