2010-09-16 5 views
0

J'essaie de créer un composant flash pour mon site Web à venir où je dois lire les données d'un fichier XML et les afficher avec un intervalle de 5 secondes - je suppose que vous pourriez appeler une image - fader/content-fader ou autre :-)Problèmes de faders d'image Flash CS4

Avant de poster mon code, je voudrais vous faire savoir que mon expérience avec AS3 est assez limitée car j'ai toujours travaillé avec Silverlight (C#) à la place.

Quoi qu'il en soit, voici mon code:

import fl.transitions.Tween; 
import fl.transitions.easing.*; 

// FIELDS 
var references:Array = new Array(); 
var counter:int = 0; 
var loader:URLLoader = new URLLoader(); 
var timer:Timer = new Timer(2000, 0); 
var image:Bitmap = new Bitmap(); 
var result:XML; 
var ref:MovieClip; 

// EVENTHANDLERS 
loader.addEventListener(Event.COMPLETE, completeHandler); 
timer.addEventListener(TimerEvent.TIMER, runTimer); 

// REQUEST XML FROM URL 
var request:URLRequest = new URLRequest("navigationReferences.xml"); 

// TRY LOAD XML FROM URL 
try { 
loader.load(request); 
} 
catch(error:Error) { 
trace("XML not available"); 
} 

// LOAD XML COMPLETED 
function completeHandler(event:Event):void { 
if(event.target.data != null) { 
    result = new XML(event.target.data); 
    parseXml(); 
} else { 
    trace("XML not available"); 
    } 
} 

// PARSE XML, BUILD NEW MOVIECLIP AND STORE IT 
function parseXml():void { 
for (var i:Number=0; i<=result.children().length()-1;i++) { 
    ref = new Reference(); 
    ref.txtTitle.text = result.navigationReference[i][email protected]; 
    loadImage(result.navigationReference[i][email protected]); 
    ref.mc_imageHolder.addChild(image); 
    references.push(ref); 

} 
timer.start(); 
} 


function runTimer(event:TimerEvent):void {  
if(counter != references.length) { 
    addChild(references[counter]); 
    counter++; 
} 
else { 
    counter = 0; 
} 
} 

// IMAGE LOADER 
function loadImage(path:String):void { 
var loader:Loader = new Loader(); 
var req:URLRequest = new URLRequest(path); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); 
loader.load(req); 
} 

// IMAGE LOAD COMPLETED 
function onComplete(e:Event):void { 
image = e.target.loader.content as Bitmap; 
} 

Il y a quelques problèmes avec ce code:

Lorsque je tente de retracer ce qui se passe réellement quand je lance le code, il passe par la boucle for parfaitement et il semble attacher l'image aswell, cependant - il court à travers la boucle une fois de plus avec le dernier enfant dans mon fichier XML pour la sortie de trace ressemblera à ceci:

XmlChildNode1 - image object attached 
XmlChildNode2 - image object attached 
XmlChildNode3 - image object attached 
XmlChildNode3 
XmlChildNode3 
XmlChildNode3 

De même, lorsque j'exécute le code, l'événement timer completed produit réellement les données correctes du MovieClip dans mon tableau, à l'exception des images?

Corrigez-moi si je me trompe ici, mais il semble que beaucoup de travail juste pour faire un fader d'image qui lit les données d'un fichier XML? Quelqu'un sait-il s'il existe une façon plus simple et élégante de faire ce que je veux faire? Ou est-ce que mon approche est correcte?

Merci beaucoup d'avance!

+0

Indice: vous pouvez simplement utiliser JavaScript et CSS, ce qui est plus facile, et fonctionne pour les personnes sans Flash. –

+0

Salut Delan, j'ai d'abord fait avec jQuery en premier, mais comme les images sont assez "sinueuses" et doivent avoir un arrière-plan transperent ça ne marchait pas vraiment bien, malheureusement :(Donc je me suis dit que je donnerais un coup d'éclat! – bomortensen

+0

En passant: Parfois, il sort seulement le dernier nœud XML deux fois au lieu de trois (?) – bomortensen

Répondre

1

J'ai finalement trouvé la solution à cela. J'ai simplement placé le chargeur d'image à l'intérieur de la boucle forcée :) Je ne sais pas si c'est la meilleure pratique ou non, mais vu que cela se passe du côté client, ça ne devrait pas vraiment poser de problème.