1

現在、外部SWFを多用するアプリケーション(Flex)に取り組んでいます。ファイル名を引数として受け取り、他のクラスにラップされたSWFを返す静的メソッドを作成したいと思います。

public static function getSWFWrapperFromFile(path:string):SWFWrapper {
   var loader:SWFLoader = new SWFLoader();
   loader.addListener(Event.COMPLETE, onLoad);
   loader.load(path);
   // If I create new SWFWrapper object here and try to assign it the loader.content  I get null reference

  }

ただし、このアプローチでは、ロード()をブロックせず、onLoadハンドラーが必要なため、ロジックを1つの関数にカプセル化することはできません。loadメソッドを呼び出した後に強制的に遅延させる可能性はありますか?それとも、別のより良い方法がありますか?

ありがとう、アロンゾ

4

4 に答える 4

1

ディスプレイリストは、非同期読み込み用に適切に設計されています。LoaderはDisplayObjectから派生したクラスであるため、ディスプレイリストに直接配置できることに気付くでしょう。コンテンツが読み込まれると、ローダーの子になります。したがって、SWFWrapperがDisplayObjectから派生している場合は、コードの最後で次のようにするだけです。


var wrapper:SWFWrapper = new SWFWrapper();
wrapper.addChild(loader);
return wrapper;
于 2009-04-10T15:54:44.720 に答える
0

Loaderオブジェクトが完了するまで待つ必要があります。イベント ハンドラを追加してみてください。はい、複数のローダーがあり、最後のローダーが完了するまで待たなければならない時点の後、全体が暗くなります。しかし、SWFLoader を使用する場合は、このようになります。

于 2009-03-18T16:55:19.593 に答える
0

フラッシュでは、メソッドでブロックすることはできません。データをロードするには、常に onLoad ハンドラーを使用する必要があります。(as3 実行モデルはシングル スレッドです。メソッドでブロックすると、残りのプログラムは実行されません)

于 2009-03-18T16:56:12.760 に答える
0

他の人が言ったように、あなたはそれをすることはできません。しかし、BulkLoader AS3 ライブラリを見てみましょう。これにより、複数のローダーを同時に管理し、それらの完了を待つという負担が肩から解放されます。十分に文書化されており、使用するのに数行しか必要ありません。

于 2009-03-18T19:02:09.680 に答える