Xml 自定义eventListener Flash AS3
不确定这是否是最好的选择,但我想也许我可以使用eventlistener来节省一些时间。我每秒加载一个XML文件一次,如果XML中有特定值,我希望有触发器。到目前为止,我有以下几点: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
//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或布尔检查器或其他东西中,以确保最后一次加载成功。在过去,我刚刚被这样的事情缠住了……:)干杯