2011-05-19 36 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。