2013-05-29 100 views
0

我有一個UILoader(加載程序)在舞臺內的影片剪輯(logoOneLoader),我想加載圖像,如果該圖像不存在,加載一個不同的我知道的圖像確實存在。以下代碼加載不存在的第一個圖像,失敗,捕獲錯誤,但不會繼續加載第二個圖像。有什麼建議麼?AS3 LoaderUI如果加載失敗加載不同的文件

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)); 
} 

回答

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); 
} 
+0

這也可能是沒有任何價值的,雖然你知道圖像將在那裏第二次服務器基石可能沒有迴應任何原因。限制它可以去檢查的次數是一個好主意。 –

+0

感謝您的回覆。我會在早上回到電腦後立即檢查您的建議。這一直讓我瘋狂! – user1129107

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 
    } 
}