AS3从FZip中检索文件

时间:2013-08-07 07:58:37

标签: actionscript-3 action flash-cs5 zipfile

我目前正在编写游戏代码,我将所有外部文件存储在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必须是非null。

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

1 个答案:

答案 0 :(得分:2)

使用loaderzip.loadBytes()加载PNG字节时,需要一个事件监听器来检查加载完成的时间。文档本身说明:

  

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

因为您在调用loadBytes()之后尝试直接访问代码,此时它实际上没有加载任何内容,所以您获得了一个空位图。

虽然您可以在调度“init”事件后访问数据,但最好等待“完成”事件,因为您希望图像完成加载(而不是中途完成)。 我已经将你的代码调整为适用的东西:

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。这就是实际调度事件的内容,它还包含加载的内容。