Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 自定义eventListener Flash AS3_Xml_Flash_Addeventlistener - Fatal编程技术网

Xml 自定义eventListener Flash AS3

Xml 自定义eventListener Flash AS3,xml,flash,addeventlistener,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.addEv

不确定这是否是最好的选择,但我想也许我可以使用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);
            }
现在我希望事件列表器在“direction”等于Left或Right时执行某些操作:

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

//movieMC_Left and movieMC_Right functions that do something.

我刚才发了一篇关于你的帖子。它可能对你有用。我有点明白你在这里做什么-但你错过了一个关键点,一个事件的调度:

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));
    }
}
this.dispatchEvent(new Event(XMLLEFT, true));
这假设您已经创建了一个扩展名为XMLEvent的事件的类(如果您对此有疑问,请阅读我的文章),它包含静态常量LEFT和RIGHT。它还假定从中分派事件的类继承自EventDispatcher(如果是sprite或movieclip,则会这样做)

否则=您的设置应该可以工作

你到底在干什么?通过XML驱动动画?嗯,你的逻辑可能有缺陷——如果你的加载时间超过一秒钟(基于你的时间),你就会开始抛出错误


无论如何-干杯

我刚才发了一篇关于的帖子。它可能对你有用。我有点明白你在这里做什么-但你错过了一个关键点,一个事件的调度:

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));
    }
}
this.dispatchEvent(new Event(XMLLEFT, true));
这假设您已经创建了一个扩展名为XMLEvent的事件的类(如果您对此有疑问,请阅读我的文章),它包含静态常量LEFT和RIGHT。它还假定从中分派事件的类继承自EventDispatcher(如果是sprite或movieclip,则会这样做)

否则=您的设置应该可以工作

你到底在干什么?通过XML驱动动画?嗯,你的逻辑可能有缺陷——如果你的加载时间超过一秒钟(基于你的时间),你就会开始抛出错误


无论如何,欢呼声只不过是字符串而已。因此,要收听两个不同的事件,您可以这样做:

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);
因此,在ProcessXML函数中,您将通过XML对象循环查找方向变量。找到要查找的内容后,发送事件:

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));
    }
}
this.dispatchEvent(new Event(XMLLEFT, true));

最后一件事:确保侦听器函数onEventRightCalled和onEventLeftCalled。

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

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);
因此,在ProcessXML函数中,您将通过XML对象循环查找方向变量。找到要查找的内容后,发送事件:

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));
    }
}
this.dispatchEvent(new Event(XMLLEFT, true));

最后一件事:确保调用侦听器函数onEventRightCalled和onEventLeftCalled。

我正在根据从Kinect相机写入XML文件的数据驱动动画。现在只是在胡闹,但我想让它工作。摄像机每秒更新一次XML,所有文件swf和XML都在同一个目录中,因此加载速度应该相当快。我会看看你的帖子,谢谢你的反馈!整洁的Kinect黑客看起来很酷,很遗憾我没有机会和他们混在一起。我会小心那个加载问题,将它放入一个try…catch或布尔检查器或其他东西中,以确保最后一次加载成功。在过去,我刚刚被这样的事情缠住了……:)Cheesell我正在根据从Kinect相机写入XML文件的数据驱动动画。现在只是在胡闹,但我想让它工作。摄像机每秒更新一次XML,所有文件swf和XML都在同一个目录中,因此加载速度应该相当快。我会看看你的帖子,谢谢你的反馈!整洁的Kinect黑客看起来很酷,很遗憾我没有机会和他们混在一起。我会小心那个加载问题,将它放入一个try…catch或布尔检查器或其他东西中,以确保最后一次加载成功。在过去,我刚刚被这样的事情缠住了……:)干杯