我正在使用 Adobe AIR 为我的 Android 手机制作 APK 文件。在 APK 包内有一个 SWF 文件,在与 SWF 文件相同的文件夹中,有一个名为“images”的子文件夹,其中包含 image.jpg。
我试图在运行时将该 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"));
它都不起作用。
即使在没有 APK 文件的情况下尝试仅运行生成的 SWF 文件(图像子文件夹与 SWF 文件位于同一文件夹中)时,我也无法使其工作。
我无法将 JPG 嵌入 SWF 文件本身,因为我需要有很多图像文件,而且在制作如此大的 SWF 文件时,Flash CS6 会耗尽内存(从外部读取图像也意味着编译时间要少得多)。
有任何想法吗?如何将外部 JPG 文件放入 BitmapData?请记住,图像不在 APK 文件之外,而是打包在其中。
注意:我稍后也会将这个东西导出到一个 iOS ipa 包中,所以它也必须在那里工作。
编辑,因为由于我的声誉,我无法自我回答。
Strille 让我意识到 ActionScript 虚拟机是单线程的。
因此,不可能让线程休眠(等待)以加载正在加载的图像。相反,我不得不叹息重写很多代码,以便在调用 onComplete 函数时停止并继续。
我之前尝试过的这件事实际上可以工作,但由于 while 循环而无法完成:
loader.load(new URLRequest("app:/images/image.jpg"));