mouseEnabledの設定で発生する不要なRollOutイベントの制御方法
押されたボタンを選択状態にして、ロックするボタン群を作ることは
多々あると思いますが、理想通りにはいかずに問題がでてきます。
選択されたボタンをロックするために
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
[通常]リスナーを削除しない場合
[修正版]リスナーを削除して、選択状態で固定出来る
単純ですがリスナー自体を切るという方法が確実ということでした。