2013-08-07 3 views
0

현재 게임을 코딩하고 있으며 공간을 절약하기 위해 모든 외부 파일을 zip 파일에 저장하고 있습니다.AS3 F3ip에서 파일 가져 오기

나는 Fzip을 사용하여 이미지를 Zip 파일에서로드하고 무대에 표시하려고하지만 운이 없다.

FZip 사이트 - http://codeazur.com.br/lab/fzip/ 예 1 개 사이트 - 나는로드 나에게 그 안에 파일의 수를 반환하는 zip 파일을 가지고있다하지만 "test.png라는 이미지를 검색하는 방법을 알아낼 수 없습니다 http://www.tuicool.com/articles/7VfQr2

".

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 년 반환되었습니다. 매개 변수 하위는 null이 아니어야합니다.

어떤 도움도 좋은 것입니다. 감사.

+0

'loaderzip'도 eventlistener가 필요할 수도 있습니다. 그리고 나서 그 내용을'image : Bitmap'에 추가 할 수 있습니까? – putvande

+0

추출 된 PNG를 다른'Loader' 객체로 파싱해야합니다. – Vesper

+0

예제를 게시 할 수 있습니까? 나는 as3을 처음 사용합니다. 감사합니다 –

답변

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입니다. 이것이 실제로 이벤트를 전달하고로드 된 내용을 포함합니다.

+0

당신은 선생님은 천재입니다. 이거 정말 고마워! 테스트를 거쳐 작동합니다! –

+0

문제가없는 남자, 나는 내가 도울 수있어서 기뻐요. :) – puggsoy