0

我在影片剪辑 (logoOneLoader) 内的舞台上有一个 UILoader (loader),我想加载一个图像,如果该图像不存在,请加载我知道确实存在的不同图像。以下代码加载不存在的第一个图像,失败,捕获错误,但随后不继续加载第二个图像。有什么建议么?

logoOneLoader = new logoLoaderGraphic();
item.addChild(logoOneLoader);
logoURL = new URLRequest("http://www.myurl.com/img/badImage.png");
logoOneLoader.addEventListener(IOErrorEvent.IO_ERROR, noLogo);
logoOneLoader.loader.load(logoURL);


function noLogo(event:IOErrorEvent):void
{
event.currentTarget.close();
var logoString:String = "http://www.myurl.com/img/goodImage.png";
event.currentTarget.load(new URLRequest(logoString));
}
4

2 回答 2

0

您可以只加载肯定存在于单独加载器中的图像,然后在错误处理程序中返回其克隆而不是加载的图像。

class ExtraLoader extends Sprite {
    private var loader:Loader; 
    private static var defaultImage:Bitmap; // load it beforehand
    public var contents:Bitmap;
    ...
    public function loadFromURL(url:URL):void {
        loader=new Loader();
        var ur:URLRequest=new URLRequest(url);
        loader.addEventListener(IOErrorEvent.IO_ERROR,oops);
        loader.addEventListener(Event.COMPLETE,done);
        loader.load(ur);
    }
    private function oops(e:Event):void {
        loader.removeEventListener(IOErrorEvent.IO_ERROR,oops);
        loader.removeEventListener(Event.COMPLETE,done);
        contents=new Bitmap(defaultImage.bitmapData); // add "good" image
        addChild(contents);
    }
    private function done(e:Event):void {
        loader.removeEventListener(IOErrorEvent.IO_ERROR,oops);
        loader.removeEventListener(Event.COMPLETE,done);
        contents=loader.content;
        addChild(contents); // loaded image - cool, add it
    }
}
于 2013-05-29T08:22:51.320 回答
0

我没有对此进行测试,但您可能还需要创建一个新的加载器对象。尝试这个:

var logoOneLoader:LogoLoaderGraphic;

loadLogo("http://www.myurl.com/img/badImage.png");

function loadLogo(url:String, fallback:Boolean = true):void {
  logoOneLoader = new logoLoaderGraphic();
  item.addChild(logoOneLoader);
  logoURL = new URLRequest(url);
  if(fallback) {
      logoOneLoader.addEventListener(IOErrorEvent.IO_ERROR, noLogo);
  } else {
      logoOneLoader.addEventListener(IOErrorEvent.IO_ERROR, logoFault);
  }
  logoOneLoader.loader.load(logoURL);
}


function noLogo(event:IOErrorEvent):void {
  logoFault(event);

  var logoString:String = "http://www.myurl.com/img/goodImage.png";

  loadLogo(logoString, false);
}

function logoFault(event:IOErrorEvent):void {
   event.target.close();
  event.target.removeEventListener(event.type, arguments.callee);
}
于 2013-05-29T01:54:40.993 回答