0
방금 중첩 된 함수를 사용하기 시작했으며 매우 편리합니다. 그러나 나는 둘러싼 함수에 의해 나중에 반환되는 변수를 채우는 데 문제가 있습니다.함수 종료시 가변 범위?
아래 코드는 일부 BitmapData
을로드하는 AIR 프로젝트를위한 코드입니다. 내 변수 ("bitmapData")는 loaderComplete
함수에 채워질 것이라고 예상했지만 항상 null로 반환됩니다. 그러나 내 trace 문에서 이미지 크기가 기록되므로 명확하게 읽었습니다.
private function getBitmapData(url:String):BitmapData
{
var bitmapData:BitmapData;
var bytes:ByteArray = getByteArray(url);
if (bytes == null){
trace("bytes null");
return null;
}
var loader:Loader = new Loader();
loader.loadBytes(bytes);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorListener);
function loaderComplete(event:Event):void
{
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaderComplete);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorListener);
var loaderInfo:LoaderInfo = LoaderInfo(event.target);
trace("loader",loaderInfo.width, loaderInfo.height);
bitmapData = new BitmapData(loaderInfo.width, loaderInfo.height, false, 0xFFFFFF);
trace("bitmapData.rect", bitmapData.rect);
bitmapData.draw(loaderInfo.loader);
}
function ioErrorListener(event:IOErrorEvent):void
{
trace("ioErrorListener", event.errorID);
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaderComplete);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorListener);
}
return bitmapData;
}
public function getByteArray(url:String):ByteArray{
var byteFile:File = new File(url);
if(byteFile.exists && !byteFile.isDirectory){
var fileStream:FileStream = new FileStream();
fileStream.open(byteFile, FileMode.READ);
var tempBytes: ByteArray = new ByteArray();
fileStream.readBytes(tempBytes);
fileStream.close();
return tempBytes;
} else {
trace("file doesnt exist");
return null;
}
}
덕분에 예를 들어, 당신은
loaderComplete
에 그 함수를 호출 한 후getBitmapData
에서 매개 변수로 함수에 대한 참조를 통과 할 수 있습니다. 나는 그것을 얻는다라고 생각한다. –