1

現在、別の .swf ファイルにネストされた .swf ファイルがあります。

親 SWF ファイルでは、UILoader を使用して他の .swf ファイルをロードします。

uiLoader.source = "data/child.swf";

-

私が持っている子SWFファイルで

stage.addEventListener(KeyboardEvent.KEY_DOWN,keyPressedDown);

単独で実行すると、完全に機能します。しかし、parent.swf stage.addEvent を介して child.swf を実行すると、null 参照例外が発生します。

問題の原因はステージの部分ですか? もしそうなら、これを修正する方法はありますか?

4

2 に答える 2

2

わかりました、これは良い質問です。理解するのに少し時間がかかりました。

基本的に、Flash はこの奇妙なこと (おそらくバグ?) を行いますが、実際にオブジェクトを初期化する前に関数を実行します。これは、ステージ上だけでムービークリップを初期化する場合にも発生します。

var mc:something = 新しい何か(); addChild(何か)

今something.asで、初期化関数のステージへの参照があるかのように、nullが返されます。(参考:http ://www.emanueleferonato.com/2009/12/03/understand-added_to_stage-event/ )

したがって、基本的に同じ問題を取り上げて urlLoader に拡張すると、実際に階層ステージを構築する前にコードが実行されます->ムービークリップ

この問題を解決するには、子 swf で次のようにします。

import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.display.MovieClip;

addEventListener(Event.ADDED_TO_STAGE, init);


function init(event:Event){
    trace("test");
    stage.addEventListener(KeyboardEvent.KEY_DOWN, moveBox);
    var testMC:test = new test();
    addChild(testMC);
}

function moveBox(event:KeyboardEvent){
    trace("a");
    testMC.x += 11;
}

上記は私のコードです。ほとんどのコードを破棄できますが、主な注意点は次のとおりです。オブジェクトが初期化された後に実行されます。

于 2011-04-30T07:53:03.247 に答える
0

完全にはわかりませんが、イベント リスナーを持つ MovieClip が別の MovieClip 内にネストされているため、「ステージ」オブジェクトにアクセスできない可能性があります。

試してみるべきことの 1 つは、ステージから eventListener を削除することです。単純に次のようになります。

addEventListener(KeyboardEvent.KEY_DOWN,keyPressedDown);

それはうまくいくかもしれません。または、イベント コードを親 MovieClip に保持することもできます。これらのことが役立つことを願っています。

デブ

于 2011-04-29T21:35:53.783 に答える