Flashで全てのボタンを一時的に無効にする小技
こんにちは
aragaです。先日初めてFlexではなくFlashCS3を使いました。
カヤック10周年サイトの「みんなのお祝いメッセージ」はアニメーションにこだわりを持っているので、一時的に全てのマウスイベントを無効にしたりしています。
こんなとき、全てのボタンにremoveEventListener()して、回復時に再度addEventListenerなんてしていたら、僕みたいな怠惰なプログラマは気が狂ってしまいます。
そこで、ちょっとした技を考えました。
ソースprivate var shield:Sprite; protected function initShield():void { if (shield) { setChildIndex(shield, numChildren); return; } shield=new Sprite(); shield.graphics.beginFill(0,0); shield.graphics.drawRect(0,0,this.width,this.height); shield.graphics.endFill(); shield.width=this.width; shield.height=this.height; shield.mouseEnabled=false; addChild(shield); } public function invalidAllMouse():void { initShield(); shield.mouseEnabled=true; } public function validAllMouse():void { if (shield) { shield.mouseEnabled=false; } }
これはマウスを無効にしているのではなく、shieldという透明のSpriteを最前面におき、
マウスを有効にすることで、他のインスタンスがマウスイベントを受けれないようにしています。
後からボタンが追加されても問題ありません。
ほんとに何も受け付けなくなるので危険ですが、
一時的にマウスを受け付けなくしたい場合などに簡単で便利です。