2009-03-18 7 views
1

現在、私は外部SWFを頻繁に使用するアプリケーション(Flex)に取り組んでいます。 ファイル名を引数とし、他のクラスにラップされたSWFを返す静的メソッドを作成したいと思います。SWFLoaderが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メソッドを呼び出した後に遅延を強制する可能性はありますか?またはmayber別の、より良い方法がありますか?

は、あなたがあなたの Loaderオブジェクトが完了するまで待つ必要が アロンゾ

答えて

0

、ありがとうございます。イベントハンドラを追加してみてください。はい、あなたが複数のローダーを持ち、最後のローダーが完了するまで待たなければならない時点以降、すべてが暗くなります。しかし、それはSWFLoaderを使うつもりならそうです。

0

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

0

他の人はそう言いました。しかし、BulkLoader AS3ライブラリを見てください。複数のローダーを同時に管理し、完了まで待つのは負担です。それはよく文書化されており、使用するには数行しか必要ありません。

1

表示リストは、非同期読み込み用に設計されています。 LoaderはDisplayObject派生クラスであるため、表示リストに直接配置することができます。そのコンテンツがロードされると、Loaderの子になります。したがって、SWFWrapperがDisplayObjectから派生したものである場合は、コードの最後に次のようにします。


var wrapper:SWFWrapper = new SWFWrapper(); 
wrapper.addChild(loader); 
return wrapper; 
関連する問題