不确定这是否是最好的选择,但想想如果我可以使用可以节省一些时间的eventlistener。我正在每秒加载一个XML文件,并且如果特定值在XML中,那么希望有触发器到目前为止我有这个:
//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);
}
现在我希望事件列表器能够在“方向”等于左或右的情况下执行某些操作:
addEventListener(myXML.LEFT, movieMC_Left);
addEventListener(myXML.LEFT, movieMC_Right);
//movieMC_Left and movieMC_Right functions that do something.
答案 0 :(得分: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));
}
}
这假设您已经创建了一个扩展Event的类,名为XMLEvent(如果您对此有疑问,请阅读我的帖子),它包含静态const LEFT和RIGHT。它还假设您从EventDispatcher的继承调度事件的类(如果它是精灵或动画片段,它会执行)。
否则=您的设置应该有效。
你在干什么?通过XML驱动动画?嗯。你的逻辑可能存在缺陷 - 如果你的负载超过一秒(基于你的时间),你将开始抛出错误。
无论如何 - 干杯
答案 1 :(得分:1)
事件类型只是字符串。因此,要听取两个不同的事件,您可以这样做:
addEventListener("XML left", onEventRightCalled);
addEventListener("XML Right, onEventLeftCalled);
对于额外级别的类型检查,您可以使事件类型包含在内。
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。