Adobe AIR を使用して、Android フォン用の APK ファイルを作成しています。APK パッケージ内には SWF ファイルがあり、SWF ファイルと同じフォルダーに、image.jpg を含む「images」という名前のサブフォルダーがあります。
実行時にその image.jpg をプログラムに読み込もうとしていますが、その場所を取得できません (プログラムはそれを見つけられないようです.
これが私が試していることです:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.load(new URLRequest("images/image.jpg"));
while (bitmapData==null) {} //wait until loaded
return bitmapData;
onComplete 関数 puts は bitmapData フィールドを設定します。ただし、COMPLETE イベントは発生しないため、while ループは存在しません。
私も試しました:
loader.load(new URLRequest("/images/image.jpg"));
loader.load(new URLRequest("app:/images/image.jpg"));
loader.load(new URLRequest("app-storage:/images/image.jpg"));
loader.load(new URLRequest("file:/images/image.jpg"));
どれも機能しません。
生成された SWF ファイルのみを実行している場合 (images サブフォルダーは SWF ファイルと同じフォルダーにあります)、APK ファイルなしで試しても、これを機能させることはできません。
JPG を SWF ファイル自体に埋め込むことはできません。これは、大量の画像ファイルが必要であり、Flash CS6 はこのような大きな SWF ファイルを作成するときにメモリ不足になるためです (画像を外部から読み取ると、コンパイル時間が大幅に短縮されます)。 )。
何か案は?外部 JPG ファイルを BitmapData に入れるにはどうすればよいですか? 画像は APK ファイルの外側ではなく、その中にパッケージ化されていることに注意してください。
注: 後で iOS ipa パッケージにもエクスポートするので、そこでも動作する必要があります。
私の評判のために自己回答できないため、編集します。
Strill のおかげで、ActionScript 仮想マシンがシングルスレッドであることを実感しました。
そのため、イメージがロードされるまでスレッドをスリープ (待機) させることはできません。代わりに、 onComplete関数が呼び出されたときに処理を停止して続行できるように、多くのコードを書き直す必要があります。
以前に試したこのことは実際には機能しますが、while ループのために完了できませんでした:
loader.load(new URLRequest("app:/images/image.jpg"));