AS3 从 FZip 检索文件

问题描述 投票:0回答:2

我目前正在编写游戏代码,并将所有外部文件存储在 zip 文件中以节省空间。

我正在尝试使用 Fzip 从 Zip 文件中加载图像并将其显示在舞台上,但我没有运气。

FZip 网站 - http://codeazur.com.br/lab/fzip/ 示例 1 站点 - http://www.tuicool.com/articles/7VfQr2

我已经加载了 zip 文件并返回其中的文件数量,但我不知道如何检索名为“test.png”的图像。

import deng.fzip.FZip;
import deng.fzip.FZipFile;
import deng.fzip.FZipLibrary;
import flash.display.*; 

var zip:FZip = new FZip();
var loaderzippy:Loader = new Loader();

function unzipObb():void {      
zip.load(new     URLRequest("file://"+File.applicationStorageDirectory.nativePath+"/cake2.zip"​));
zip.addEventListener(Event.OPEN, onOpen);
zip.addEventListener(Event.COMPLETE, dosomething);  }   

function dosomething(evt:Event):void {
trace("dosomething");
var img_file:FZipFile = zip.getFileByName("test.png");
var loaderzip:Loader = new Loader();
loaderzip.loadBytes(img_file.content);

var image:Bitmap = Bitmap(loaderzip.content); 
addChild(image); }

我刚刚返回#2007:参数 child 必须为非空。

任何帮助都会很棒。谢谢。

actionscript-3 action flash-cs5 zip
2个回答
2
投票

当您使用

loaderzip.loadBytes()
加载 PNG 字节时,您需要一个事件侦听器来检查加载何时完成。文档本身指出:

loadBytes() 方法是异步的。在访问已加载对象的属性之前,您必须等待“init”事件。

因为您在调用 loadBytes() 之后尝试直接

访问代码,此时它实际上尚未加载任何内容,所以您将得到一个空位图。

虽然您可以在调度“init”事件后访问数据,但最好等待“complete”事件,因为您希望图像完成加载(而不是半途完成)。 我已经将您的代码调整为应该可以工作的内容:

function dosomething(evt:Event):void { trace("dosomething"); var img_file:FZipFile = zip.getFileByName("test.png"); var loaderzip:Loader = new Loader(); loaderzip.contentLoaderInfo.addEventListener(Event.COMPLETE, getImage); loaderzip.loadBytes(img_file.content); } function getImage(e:Event):void { var loaderInfo:LoaderInfo = e.currentTarget as LoaderInfo; var image:Bitmap = Bitmap(loaderInfo.content); addChild(image); }

(我自己没有测试过,但这只是为了给你一个总体思路。)

请注意,您应该将事件侦听器添加到

loaderzip.contentLoaderInfo

,而不是
只是loaderzip。这就是实际调度事件的内容,它还包含加载的内容。
    


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.