2010-10-18 59 views
2

嗨iam试图加载一些外部jpeg在As3中。 它在Flash中可以很好地在本地运行,但它并不适用于我的服务器。 我的应用程序还同时加载了一个YouTube视频。Flash As3加载程序问题

function drawResult(index,videoID,song_title,thumbnail:String=null) 
{ 
    var theClip:resultRowClip=new resultRowClip(); 
    _clip.addChild(theClip); 
    myArray[index] = new Array(videoID,theClip); 
    theClip.y=0+(43*(index-1)); 
    theClip.rowText.text = song_title; 
    theClip.rowBack.visible = false; 
    if (thumbnail != ""){ 
     theClip.tHolder.visible=true; 
     loadImage(thumbnail,index); 
    } 
} 

function loadImage(url:String,index):void 
{ 
    //this.myClip.myText.text += "load image"; 
    // Set properties on my Loader object 
    var imageLoader:Loader = new Loader(); 
    imageLoader.load(new URLRequest(url)); 
    imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (evt:Event){imageLoaded(evt,index)}); 
} 

function imageLoaded(evt,id):void 
{ 
    //this.myClip.myText.text += "id : evt : " + evt.status; 
    // Load Image 
    var image:Bitmap = new Bitmap(evt.target.content.bitmapData); 
    myArray[id][1].tHolder.addChild(image); 
    myArray[id][1].tHolder.width=myArray[id][1].tHolder.width*0.35; 
    myArray[id][1].tHolder.height=myArray[id][1].tHolder.height*0.35; 
} 

有没有人知道问题是什么?

**我添加了两个Evenet听众从IO错误:

imageLoader.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); 
imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); 

这是处理错误的函数:

private function ioErrorHandler(event:IOErrorEvent):void { 
    this.myClip.myText.text +=("ioErrorHandler: " + event); 
} 

反正,我没有错误...

我也试图在imageLoader.load之前移动监听器,但它仍然是一样的...没有错误,也没有加载数据。

我我的代码更改为patrikS建议:

function loadImage(url:String,index):void 
     { 

      //this.myClip.myText.text += "load image"; 
      // Set properties on my Loader object 
      //if (index != 1) return; 
      var imageLoader:Loader = new Loader(); 
      imageLoader.name = index.toString(); 

      //myArray[index][1].addChild(imageLoader); 
      //imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (evt:Event){imageLoaded(evt,index)}); 
      imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);  
      imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); 
      imageLoader.load(new URLRequest(url)); 


     } 

我现在completeHandler函数(TNX patrikS):

private function completeHandler(evt:Event):void{ 
      //this.myClip.myText.text += "id : evt : " + evt.status; 
      // Load Image 
      trace("evt target loader name : "+ evt.target.loader.name); 
      evt.target.removeEventListener(Event.COMPLETE, completeHandler); 
      var image:Bitmap = new Bitmap(evt.target.content.bitmapData); 
      myArray[evt.target.loader.name][1].tHolder.addChild(image); 
      myArray[evt.target.loader.name][1].tHolder.width=myArray[evt.target.loader.name][1].tHolder.width*0.35; 
      myArray[evt.target.loader.name][1].tHolder.height=myArray[evt.target.loader.name][1].tHolder.height*0.35; 
      //trace (hadar.y + "Y/X" + hadar.x); 
     } 

它仍然只在闪光灯IDE和dosent工作在任何浏览器中运行...

+0

添加一个错误事件的事件监听器并发布问题是什么。 – Kricket 2010-10-18 08:20:01

+0

我试图添加2个侦听器:imageLoader.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,事件。ioErrorHandler);并没有响应...所以这意味着没有错误..?!? – Hadar 2010-10-18 08:32:07

+0

这些文件位于何处?您是否在本地测试.swf,但在服务器上使用.html页面进行测试? – Joony 2010-10-18 09:48:33

回答

0

在调用load()方法之前应该添加监听器。 还有没有真正的优势使用闭包完成事件监听器&认为删除事件监听器!

 
function loadImage(url:String, index:int):void 
{ 
    //this.myClip.myText.text += "load image"; 

    // Set properties on my Loader object 
    var imageLoader:Loader = new Loader(); 
    imageLoader.name = index.toString(); 

    //make sure you to add your listeners here! 
    imageLoader.contentLoaderInfo.addEventListener(
        IOErrorEvent.IO_ERROR,ioErrorHandler); 

    imageLoader.contentLoaderInfo.addEventListener(
        Event.COMPLETE, completeHandler); 

    imageLoader.load(new URLRequest(url)); 

} 

function completeHandler(event:Event):void 
{ 
    //imageLoaded(evt,index); 
    trace(event.target.loader.name); 
    event.target.removeEventListener(Event.COMPLETE, completeHandler); 
} 
+0

谢谢,但在imageLoader.load之前移动侦听器并没有改变任何东西。我的代码有什么问题吗? – Hadar 2010-10-18 08:56:07

+0

imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler); - >如果我使用这个,我失去了我想更新的对象的Id ... – Hadar 2010-10-18 09:26:03

+0

不一定...使用loader.name属性来标识你的对象 – PatrickS 2010-10-18 09:57:15

1

尝试URLStream在检查的crossdomain.xml :)

urlstream = new URLStream(); 
    urlstream.addEventListener(Event.COMPLETE, onLoad); 
    urlstream.addEventListener(IOErrorEvent.IO_ERROR, onErr); 
    urlstream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onErr); 
    urlstream.load(req); 
     private function onLoad(e:Event):void { 
      var ba:ByteArray = new ByteArray(); 
      urlstream.readBytes(ba, 0, urlstream.bytesAvailable); 
      _loader.contentLoaderInfo.addEventListener(Event.INIT, onBytesLoad); 
      _loader.loadBytes(ba); 
     }