[AS]内部にムービークリップを持つMCをgoAndStop()でMCが存在しないフレームへ移動したあとMCが存在するフレームに戻しても内部MCはnull参照になるみたい
タイトルが何言ってるかよくわからないと思うので、以下のフレームアクションを参照ください。
前提条件
//メインタイムラインにMovieClipインスタンス(インスタンス名:_mc1)を配置
//_mcの内部は全2フレームで、1フレーム目にフレームアクションstop();を記載
//_mcは内部の1フレーム目にのみ、MovieClipインスタンス(インスタンス名:_mc2)を持つ
//_mcの2フレーム目は何もない状態。
//ステージにMovieClipインスタンス(インスタンス名:_mc1)を配置 //_mcの内部は全2フレームで、1フレーム目にフレームアクションstop();を記載 //_mcは内部の1フレーム目にのみ、MovieClipインスタンス(インスタンス名:_mc2)を持つ //_mcの2フレーム目は何もない状態。 trace("before _mc1:"+_mc1); //出力:before _mc:[object Timeline_1] trace("before _mc1._mc2:"+_mc1._mc2); //出力:before _mc._btn:[object SimpleButton] var mc:MovieClip = _mc1._mc2; mc.buttonMode = true; trace("before numChildren:"+_mc1.numChildren); //出力:before numChildren:1 trace("before getChildAt:"+_mc1.getChildAt(_mc1.numChildren-1)); //出力:before getChildAt:[object MovieClip] //_mcの2フレーム目に移動(_btnがないフレーム) _mc1.gotoAndStop(2); //_mcの1フレーム目に移動(_btnがあるフレーム) _mc1.gotoAndStop(1); trace("after _mc1:"+_mc1); //出力:after _mc1:[object Timeline_1] trace("after _mc1._mc2:"+_mc1._mc2); //出力:after _mc1._mc2:null trace("after mc:"+mc); //出力:after mc:[object MovieClip] trace("after numChildren:"+_mc1.numChildren); //出力:after numChildren:1 trace("after getChildAt:"+_mc1.getChildAt(_mc1.numChildren-1)); //出力:after getChildAt:null //nullでないmcが_mc2と同じと思いきや、そうでもない様子 mc.buttonMode = true;//マウスカーソルにならない
ちなみにこれはFlashPlayer9での書き出しの場合。
FlashPlayer10での書き出しの場合は、上記スクリプトのnullの部分が全部Mcとなる。
・・・が、元のMcを挿しているわけでは無いようで、最後のbuttonModeは適応されない。
だいぶAS3と戯れてきたと思ったはずなのに今始めてしった挙動。。。
Flash-JPに似たような内容の記事がありました。
http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=8525&forum=20
Tweet