0

そのため、AS3 で次のようなことを実行して、任意の画像を読み込み、実行時にビットマップ データを取得しようとしました。

var bitmapData:BitmapData;
var loader:Loader;
var completed:Boolean = false;

public function loadBitData(path:String):BitmapData{
    loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    loader.load(new URLRequest(path));
    while(!completed){

    }
    completed = false;
    return bitmapData;
}


private function onComplete (event:Event):void{
    bitmapData = Bitmap(LoaderInfo(event.target).content).bitmapData;
    completed = true;
}

ローダーは別のスレッドでファイルをロードしないため、このコードは明らかに無限ループに陥ります。while ループを削除すると、そのステートメントに到達するまでにデータがロードされていないため、メソッドは null を返します。ただし、後でデータをロードします。(進行状況イベントを使用してこれを確認し、これまでにロードされたデータの量を出力しました)

メソッドがファイルをロードし、完全にロードされたら BitmapData を返すようにしたいだけです。これが発生するまで、プログラムは待機し、それ以上コードを実行しないでください。これに関する任意の助けをいただければ幸いです。

4

2 に答える 2

1

いいえ、プログラムはイメージがロードされるまで待つべきではありません。データのロードは非同期で行われます。

プログラミングでは、非同期イベントはメイン プログラム フローとは無関係に発生するイベントです。非同期アクションは、ノンブロッキング スキームで実行されるアクションであり、メイン プログラム フローが処理を続行できるようにします。

外部データがロードされている間、アプリケーションは引き続き正常に実行されます。メソッドonComplete()は、データが完全にロードされたらどうなるかを管理する必要がある場所です。その時点まで何かを実行したくない場合は、そのコードをonCompleteハンドラーに移動します。

于 2012-06-03T23:20:19.973 に答える
0
  1. LoaderMaxを使用する場合- 読み込みを開始した直後に、固定サイズの特別な表示オブジェクトが取得され、適切な画像が読み込まれると自動的に更新されます。実際にロードする前に、ステージ上に画像のサイズの場所が必要な場合は、これで問題が解決する可能性があります。

  2. サードパーティのツールを使用せずにこれを処理する必要がある場合、または何か別の処理が必要な場合は、データが読み込まれるときにカスタム イベントをディスパッチし、アプリケーションが反応するようにします。その1つの関数だけではこれを処理できません。これは非同期であるため、適切なアーキテクチャが必要です。イベントを中心に物事を再設計してみてください。

于 2012-06-03T23:30:22.663 に答える