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ファイル)。

この記事には、カテゴリ Flash タグは がつけられています。

Flashでウィンドウを出したときにそれ以外のmc、ボタンを全て押せなくする方法 への2件のフィードバック

  1. un より:

    はじめまして
    つい先日ryowさんのblogを発見し、いろいろ勉強させて頂いております。
    目から鱗な記事が多く感謝です!!
    まさに今、他のボタンの制御に手をやいていたところでさっそく紹介されている方法を試してみたのですが、僕の環境では成功しませんでした。。
    mac flash8
    僕の場合createEmptyMovieClip()で作成した空MCのサイズは変更出来ないようです。
    代入後にtrace()してみると0となり、onReleaseは反応しませんでした。
    attachMovie(“screen”,”screen”,100);
    screen._x = (Stage.width – screen._width)/2;
    screen._y = (Stage.height – screen._height)/2;
    _root.createEmptyMovieClip(“asdf”,99);
    asdf._width = 1000;
    asdf._height = 1000;
    asdf.onPress = function(){
    trace(“押したよ”);
    }
    です。
    うむむ。
    なぜなんでしょう!?

  2. ryow より:

    unさま
    コメントありがとうございました。
    createEmptyMovieClipはダメでした。勘違いしてました。
    ダミーのmcをやっぱりアタッチするか(_alpha0とかで)の方法がよいと思います。。