Flashでウィンドウを出したときにそれ以外のmc、ボタンを全て押せなくする方法
アホだった。
僕はアホだった。
今まで、ボタンを押して小窓を出したとき、それ以外のボタンやmcをいちいち_enabled=false の処理を書いていた。ボタンが多くなるともう管理しきれない。
全てのmcを取得して全部をenableするのは大変だ! もうダメだ! と思ってたけど、一瞬でそれを解決できる方法を見つけた。
以下は、ウィンドウボタンを押すとwindowというmcを画面にアタッチする場合。windowの深度は変数Dとします。
//前に公開してたバグがあるやつ!!!! //下のを使ってください!!! window_btn.onRelease=function(){ var $w = target.attachMovie("window","window_mc",D) $w._x = (Stage.width - $w._width)/2 $w._y = (Stage.height - $w._height)/2 var $e = _root.createEmptyMovieClip("empty_mc",D-1) $e._width=Stage.width $e._height=Stage.height $e.onRollOver=function(){ this.useHandCursor = false } }
↑のは間違いです。createEmptyMovieClipの_widthは変えられません。だってemptyだから。中に何か別のmcを入れるならいいんだけど。
window_btn.onRelease=function(){ var $w = _root.attachMovie("window","window_mc",D) //_rootにattachしなくてもいいけど $w._x = (Stage.width - $w._width)/2 $w._y = (Stage.height - $w._height)/2 var $e = _root.attachMovie("dummy","dummy_mc",D-1) $e._width=Stage.width $e._height=Stage.height $e.onRollOver=function(){ this.useHandCursor = false } }
つまり、小窓mcより一つ深度が深いところにmcを作って、それにRollOver関数を持たせて上げればいい。本来ならどこを触っても指マーク(RollOverで)になるところを、無理やりuseHandCursorをFにして回避。
これで一瞬にして、小窓以外触れない画面を作ることができました。good job!
2008.01追記。コメントでun様に指摘いただきました。勘違いしてました…本当にごめんなさい。
createEmptyMovieClipしたmcはそのままでは_widthを持てません。この方法を使うにはダミー用のmcをattachMovieするか、空mcをBitmapDataで空画像として使うか(Flash8以降)、ですね。
検証に使ったファイルはこちら(ver8形式 flaファイル)。