2010-10-18 7 views
2

Bonjour iam essayant de charger quelques jpeg externes dans As3. Cela fonctionne bien localement dans Flash, mais il ne fonctionne pas du tout sur mon serveur. Mon application charge également une vidéo YouTube simultanément.Flash As3 Loader Problème

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

Est-ce que quelqu'un sait quel est le problème?

** J'ajouté deux écouteurs Evenet de io Erreur:

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

C'est la fonction de traitement des erreurs:

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

de toute façon, je suis pas d'erreur ...

J'ai également essayé de déplacer les écouteurs avant imageLoader.load mais c'est toujours la même ... aucune erreur et aucune donnée chargée ..

je change mon code pour Patriks suggestion:

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


     } 

Ma fonction actuelle de completeHandler (de Patriks de TNX):

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

Il fonctionne encore que sur IDE flash et le travail dosent sur un navigateur ...

+0

Ajoutez un écouteur d'événement pour l'événement d'erreur et affichez quel est le problème. – Kricket

+0

J'ai essayé d'ajouter 2 écouteurs: imageLoader.addEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler); imageLoader.contentLoaderInfo.addEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler); et n'a obtenu aucune réponse ... donc cela signifie qu'il n'y a pas d'erreur ..?!? – Hadar

+0

Où sont situés les fichiers? Testez-vous le fichier .swf localement, mais effectuez des tests en utilisant une page .html sur votre serveur? – Joony

Répondre

0

Les récepteurs doivent être ajoutés avant d'appeler la méthode load(). Il n'y a pas non plus de réel avantage à utiliser une fermeture pour l'écouteur d'événement complet & pensez à supprimer les écouteurs d'événement!

 
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

Merci, mais déplacer les écouteurs avant imageLoader.load n'a rien changé. quoi que ce soit d'autre avec mon code? – Hadar

+0

imageLoader.contentLoaderInfo.addEventListener (Event.COMPLETE, completeHandler); -> si j'utilise ceci je perds l'identifiant de l'objet que je veux mettre à jour ... – Hadar

+0

pas nécessairement ... utiliser la propriété loader.name pour identifier votre objet – PatrickS

1
URLStream

try et vérifier 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); 
     }