如何在ActionScript 3中的函数调用中加载并返回.png文件?

如何在ActionScript 3中的函数调用中加载并返回.png文件?,actionscript,asynchronous,png,setinterval,synchronous,Actionscript,Asynchronous,Png,Setinterval,Synchronous,ActionScript似乎不支持同步加载png。我已经尝试过异步加载它,但是存在让函数等待加载完成的问题。我不能做到这一点。我尝试在while循环中调用setInterval和settimut,并在加载完成时中断,但我得到了一些非常神秘的行为。对于函数参数,我传递了一个名为doNothing的函数,它只是一个空函数。当我运行时,setInterval或setTimeout会很快地反复出现。他们不会等到提供的时间再打电话。而且,doNothing从未接到过电话 这是我的密码: private f

ActionScript似乎不支持同步加载png。我已经尝试过异步加载它,但是存在让函数等待加载完成的问题。我不能做到这一点。我尝试在while循环中调用setInterval和settimut,并在加载完成时中断,但我得到了一些非常神秘的行为。对于函数参数,我传递了一个名为doNothing的函数,它只是一个空函数。当我运行时,setInterval或setTimeout会很快地反复出现。他们不会等到提供的时间再打电话。而且,doNothing从未接到过电话

这是我的密码:

private function getData(extension:String):Bitmap
{
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onComplete);
    loader.contentLoaderInfo.addEventListener(ErrorEvent.ERROR, onComplete);
    loader.load(new URLRequest(baseDir + extension));

    while (bitmap == null)
    {
        var test:Number = setInterval(doNothing, 1000);
    }

    var ret:Bitmap = bitmap;
    bitmap = null;

    return ret;
}

function onComplete(event:Event):void
{
    bitmap = Bitmap(LoaderInfo(event.target).content);
}

function doNothing():void
{
    trace("did nothing");
}

while循环在这里不好,因为它会导致客户端冻结(15秒的冻结将抛出一个错误)

建议的实施:

private var loader:Loader;
private var onSuccess:Function;

// onSuccess = function (bitmap:Bitmap) : void
// onFail = function (e:ErrorEvent) : void
private function getData(extension:String, onSuccess:Function, onFail:Function):void
{
    this.onSucess = onSuccess;
    loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onFail);
    loader.contentLoaderInfo.addEventListener(ErrorEvent.ERROR, onFail);
    loader.load(new URLRequest(baseDir + extension));
}

private function onComplete(event:Event):void
{
    bitmap = Bitmap(LoaderInfo(event.target).content);
    onSuccess.call(null, bitmap);
    dispose();
}

private function dispose():void
{
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
    loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onFail);
    loader.contentLoaderInfo.removeEventListener(ErrorEvent.ERROR, onFail);
    this.loader = null;
    this.onSuccess = null;
}

文件加载协议应该有一个可以绑定的事件,以便在完全加载时通知您。你在做什么?请编写代码?由于Flex使用单线程模型,试图实现类似的功能将导致接口在图像加载过程中冻结,因此调用getData函数的代码应该侦听偶数,而不是直接期望数据。就像TheZ说的,你想做什么?是的,这正是我需要的。好吧,如果你真的需要,你可以看看这里:但是有一个风险,onComplete函数将不会被调用。另一个解决方案是使用“callLater”函数