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!
Indice: vous pouvez simplement utiliser JavaScript et CSS, ce qui est plus facile, et fonctionne pour les personnes sans Flash. –
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
En passant: Parfois, il sort seulement le dernier nœud XML deux fois au lieu de trois (?) – bomortensen