0

現在ゲームのコーディングを行っており、スペースを節約するためにすべての外部ファイルを 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: Parameter child must be non-null が返されました。

どんな助けでも素晴らしいでしょう。ありがとう。

4

1 に答える 1

2

を使用して PNG バイトをロードする場合、ロードがloaderzip.loadBytes()完了したことを確認するイベント リスナーが必要です。ドキュメント自体には次のように記載されています。

loadBytes() メソッドは非同期です。ロードされたオブジェクトのプロパティにアクセスする前に、「init」イベントを待つ必要があります。

を呼び出した直後にコードにアクセスしようとしているためloadBytes()、実際には何もロードされていないため、null ビットマップを取得しています。

「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。それが実際にイベントをディスパッチするものであり、ロードされたコンテンツも含まれています。

于 2013-08-07T09:29:09.280 に答える