2010-09-16 58 views
0

我想为即将推出的网站构建一个Flash组件,我必须从XML文件中读取数据并以5秒的间隔显示这些数据 - 我想你可以称它为图像 - 推子或内容推子或一些这样的:-)Flash CS4图像推子问题

在我发布我的代码之前,我想告诉你我的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][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; 
} 

有这个代码的一些问题:

当我尝试跟踪,当我通过for循环中运行它运行的代码完全到底发生了什么它似乎像藏汉但是附加, - 它贯穿于循环再次与最后一个孩子在我的XML文件,以便跟踪输出看起来就像这样:

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

另外,当我运行代码时,计时器完成事件实际上会从我的数组中的MovieClip中输出正确的数据,但图像除外?

纠正我,如果我在这里错了,但它似乎是一个很大的工作,只是为了制作一个图像推子从XML文件读取数据?任何人都知道是否有更简单,更优雅的方式来做我想做的事情?或者我的方法实际上是对的?

非常感谢!

+0

提示:您可以使用JavaScript和CSS,这更简单,适用于没有Flash的人。 – 2010-09-16 10:55:10

+0

嗨德兰,我实际上是用jQuery做的,但是由于图片相当“弯曲”,并且必须有一个transperent背景,所以它实际上并不能很好地工作,所以我想我会给Flash一个去! – bomortensen 2010-09-16 11:18:43

+0

顺便说一句:有时它只输出两次而不是三次(?)的最后一个XML节点 – bomortensen 2010-09-16 11:37:50

回答

1

我终于找到了解决方案。我只是简单地将图像加载器放在for循环中:)不知道它是否是最佳实践,但是看到它发生在客户端时,它应该不是真正的问题。