自定义eventListener Flash AS3

时间:2011-05-19 18:02:31

标签: xml flash addeventlistener

不确定这是否是最好的选择,但想想如果我可以使用可以节省一些时间的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.

2 个答案:

答案 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。