0

私はかなり前から次の問題をデバッグしていて、壁にぶつかりました。

ゲームのさまざまな画面を表すために移動する一連のキーフレームを持つプロジェクトをFlash(CS4、btw)でセットアップしました。それらの1つには、いくつかの異なるキーフレームに表示されるオプションメニューを表すMovieClipが定義されています(その中に子が含まれています)。

私が抱えている問題は、最初にキーフレームに入ったとき(「gotoAndStop」を使用)、およびときどき他のフレームに移動して戻ったときに、このMovieClip参照にアクセスできるように見えることです。しかし、少なくとも1つのケースでは、フレームを終了して戻ったときに、null参照エラーが発生します(TypeError:エラー#1009:nullオブジェクト参照のプロパティまたはメソッドにアクセスできません)。アクセスしようとすると(getChildByName( "optionMenuTitle"))。システムに0からnumChildrenまで反復させて各オブジェクトの名前を出力しようとしましたが、numChildrenを9として返したにもかかわらず、位置7でNULLを返します。この特定のMovieClip参照がこの中でのみNULLである理由を誰かが知っていますか?場合??

発生するプロセスの基本的な(省略された)要約は次のとおりです。

//set up function to be fired on frame construction
addEventListener(Event.FRAME_CONSTRUCTED, fadeIn, false, 0, true);  

public function fadeIn(event:Event):void {
   _handler.handle(); //this function is called which runs the debug statement below
   trace (mainDoc.numChildren); //displays 9
   for (var i = 0; i < mainDoc.numChildren; i++) { trace(mainDoc.getChildAt(i).name); } //throws null when it gets to 7 
   optionMenuTitle = OptionMenu(mainDoc.getChildByName("optionMenuTitle")); //the original failed call that caused me to debug
}

編集:もう1つの潜在的に有用な情報。そのエラーの上にあるgetChildコマンドをコメントアウトすると、フレームが読み込まれ、MovieClipがステージに視覚的に表示されます(ただし、インタラクティブではなく、子オブジェクトのフレームを常に循環しています)。それでもプログラムでアクセスすることはできません。

別の編集:問題のオブジェクトは、「OptionMenu」という名前のMovieClipのサブクラスです。OptionMenuコンストラクターにブレークポイントを設定し、フレームが正しくロードされると、そのブレークポイントがヒットします。上記のエラーが発生した場合、コンストラクターのブレークポイントに到達することはありません。デバッガーは、フレームをインスタンス化するときにFlashの頭の中で何が起こっているかを確認するためのアクセスを私に与えていないようです。したがって、コンストラクターが呼び出されない理由についてのロジックを確認できません。

4

1 に答える 1

1

さて、これは私を夢中にさせています。optionMenuTitle2回目と呼ばれるフレームに戻ったときに、なぜそれがあなたを参照しないのか、私は理解できませんでしtitleた。

これを回避する唯一の方法は、OptionMenuMovieClipから3つのボタンを取り出し、背景が灰色のステージに配置することでした。基本的にはを削除しましたOptionsMenu

そこで、すべての初期化コードをからに移動しOptionMenu、3つのボタンのそれぞれについてTitleHanlderdestroyメソッドにdestroy呼び出しを追加しました。TitleHandler

また、refをrootからmainDocに変更しました。

sound.initialize(LogicGameMain(mainDoc).soundOn);
music.initialize(LogicGameMain(mainDoc).musicOn);

2回目もボタンを操作できるので、これは私にとってはうまくいきました。間違いなく、これらのボタンがネストされているというバグがあるようです。

これがお役に立てば幸いです。

于 2012-05-16T22:35:04.830 に答える