- 2007年10月 2日 20:15
- Flash
アホだった。
僕はアホだった。
今まで、ボタンを押して小窓を出したとき、それ以外のボタンや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ファイル)。- Newer: TOYOTA ヴァンガードのサイトがひどい
- Older: movable typeもcssの複数クラス(多重継承)してた
Comments:2
- un 2008年1月10日 09:03
はじめまして
つい先日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("押したよ");
}です。
うむむ。
なぜなんでしょう!?- ryow 2008年1月10日 20:53
unさま
コメントありがとうございました。createEmptyMovieClipはダメでした。勘違いしてました。
ダミーのmcをやっぱりアタッチするか(_alpha0とかで)の方法がよいと思います。。
Trackbacks:0
- TrackBack URL for this entry
- http://ryow.net/mt/mt-tb.cgi/235
- Listed below are links to weblogs that reference
- Flashでウィンドウを出したときにそれ以外のmc、ボタンを全て押せなくする方法 from ryow.net Blog