我正在尝试为即将推出的网站构建一个flash组件,我必须从XML文件中读取数据并以5秒的间隔显示这些数据 - 我想你可以称之为图像推子/内容推子或者其中一些: - )
在发布我的代码之前,我想告诉您,我对AS3的体验非常有限,因为我一直在使用Silverlight(C#)。
无论如何,这是我的代码:
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].@title;
loadImage(result.navigationReference[i].@image);
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;
}
此代码存在一些问题:
当我尝试跟踪运行代码时实际发生的事情时,它完美地运行for-loop并且它似乎附加了图像,但是 - 它再次运行循环再次使用我的XML文件中的最后一个子代所以跟踪输出将如下所示:
XmlChildNode1 - image object attached
XmlChildNode2 - image object attached
XmlChildNode3 - image object attached
XmlChildNode3
XmlChildNode3
XmlChildNode3
另外,当我运行代码时,计时器完成事件实际上从我的数组中的MovieClip输出正确的数据,除了图像?
如果我在这里错了,请纠正我,但是制作一个从XML文件中读取数据的图像推子似乎需要做很多工作?任何人都知道是否有一种更简单,更优雅的方式来做我想做的事情?或者我的方法是否正确?
提前多多感谢!
答案 0 :(得分:1)
我终于找到了解决方法。我只是将图像加载器放在for循环中:)不知道它是否是最佳实践,但看到它发生在客户端,它应该不是真正的问题。