2011-05-19 35 views
0

不知道这是否是最好的选择,但也许想如果我可以使用可节省一些时间的eventlistener。我加载XML文件一次,第二次和希望这是触发,如果特定的值是在XML到目前为止,我有这样的:自定义eventListener Flash AS3

//TIMER THAT LOADS XML ONCE A SECOND 
var myXML:XML; 
var myLoader:URLLoader = new URLLoader(); 

var myTimer:Timer = new Timer(100,2); // 1 second 
myTimer.addEventListener(TimerEvent.TIMER, runOnce); 
myTimer.start(); 

function runOnce(event:TimerEvent):void { 
    trace("HELLO"); 
myLoader.load(new URLRequest("myxml.xml")); 
myLoader.addEventListener(Event.COMPLETE, processXML); 

} 

function processXML(e:Event):void { 
      trace("load XML"); 
      myXML = new XML(e.target.data); 
      trace(myXML); 
      } 

现在我想事件listners该做些什么,如果“方向”等于左或右:

addEventListener(myXML.LEFT, movieMC_Left); 
addEventListener(myXML.LEFT, movieMC_Right); 

//movieMC_Left and movieMC_Right functions that do something. 

回答

2

我发表了一个帖子,前一段关于implementing custom events。这可能对你有用。我有种让你在这里做什么 - 但你缺少一个关键点,事件的调度:

function processXML(e:Event):void { 
    myXML = new XML(e.target.data); 

    if (myXML.direction == "Left") 
    { 
     this.dispatchEvent(new XMLEvent(new XMLEvent.LEFT)); 
    } 
    else 
    { 
    this.dispatchEvent(new XMLEvent(new XMLEvent.RIGHT)); 
    } 
} 

这是假设你已经创建了一个扩展名为事件一个一个XMLEvent类(阅读我的文章,如果你对此有疑问),它包含静态常量LEFT和RIGHT。它还假定你正在从EventDispatcher的继承中分派事件(如果它是一个精灵或动画片段,它会这样做)。

否则=你的设置应该工作。

你到底在干什么?通过XML驱动动画?嗯。你的逻辑在这方面可能存在缺陷 - 如果你的负载时间超过一秒(根据你的时间),你会开始抛出错误。

无论如何 - 欢呼声

+0

那么我正在驾驶动画的基础上从Kinect相机写入XML文件的数据。现在只是乱搞,但想要得到它的工作。相机每隔一秒更新一次所有文件swf和xml在同一个目录中,因此应该加载速度非常快。我会看看你的帖子,并感谢你的反馈! – Denoteone 2011-05-20 01:38:32

+0

整洁。 Kinect的黑客看起来非常酷,难过,我没有机会弄乱一个。我会小心这个负载问题,将其工作到一个try ... catch或布尔检查器或一些东西,以确保最后一次加载是成功的。我刚刚被过去那样的东西钉住了...... :)欢呼声 – Bosworth99 2011-05-20 15:56:38

1

事件类型只是字符串。因此,要监听两个不同的事件,你可以这样做:

addEventListener("XML left", onEventRightCalled); 
addEventListener("XML Right, onEventLeftCalled); 

对于类型额外级别的检查,你可以让你的事件类型contants。

public static const XMLLEFT:String = "XML left"; 
public static const XMLRIGHT:String = "XML right"; 
addEventListener(XMLLEFT, onEventRightCalled); 
addEventListener(XMLRIGHT, onEventLeftCalled); 

所以在你的过程XML函数中,你将通过你的XML对象循环寻找方向变量。当你发现你在找什么,分派事件:

this.dispatchEvent(new Event(XMLLEFT, true)); 

最后一件事:请务必使听者功能,onEventRightCalled和onEventLeftCalled。