2011-03-23 51 views
2

我怎麼能「模擬」一MouseEvent,那尚未通過按鈕eventListener (例如只是一個簡單的函數調用)以及如何傳遞變量到它切換event.types啓動?as3:如何模擬MouseEvents?

public function myMouseEvent(event:MouseEvent):void 
    { 
      switch (event.type) 
      { 
       case "mouseDown" : 
        trace(event.type) 
        break; 

       case "mouseUp" : 
        trace(event.type) 
        break; 
      } 
    } 

    myMouseEvent(null) // ? nothing happens... 
+0

你究竟需要什麼?你需要模擬鼠標行爲嗎? – Kevin 2011-03-23 14:54:35

+0

是的,正好! :)(mouseDown,mouseUp +設置event.target) – mate64 2011-03-23 14:57:10

+0

您是否已經創建了自己的事件和您自己的偵聽器? – Kevin 2011-03-23 15:01:09

回答

6

1/基本

你的情況,有些事情,你可以直接撥打電話

myMouseEvent(new MouseEvent(MouseEvent.MOUSE_DOWN)); 

2/事件

但你能做到這一點的多個事件面向方式。

eventDispatcher.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN)); 

其中eventDispatcher是Sprite(or something else)你加入你的監聽器。

3/合適的事件

因爲你不能訪問到MouseEvent的所有屬性,當你發送它這樣,有一個更清潔的方式做到這一點:

public function myMouseEvent(event:Event):void 
{ 
     switch (event.type) 
     { 
      case "mouseDown" : 
       trace(event.type) 
       break; 

      case "mouseUp" : 
       trace(event.type) 
       break; 
     } 
} 
eventDispatcher.addEventListener(MouseEvent.MOUSE_DOWN, myMouseEvent); 
eventDispatcher.dispatchEvent(new Event(MouseEvent.MOUSE_DOWN)); 

所有三個可能工作!

+0

優秀的答案。通過與文檔的鏈接,它將是完美無瑕的。 – Raveline 2011-03-23 15:05:18

+0

非常感謝你! – mate64 2011-03-23 15:23:42

+0

不客氣:) – Kodiak 2011-03-23 15:34:51

0

myMouseEvent(null)呼叫實際上應該給你一個Exception你盡力了null對象上訪問一個參數(type)。

要正確調用此方法,你只需要創建一個MouseEvent對象傳遞給函數:

// add in any other params, like localX, stageX, etc 
var m:MouseEvent = new MouseEvent(MouseEvent.MOUSE_DOWN); 
this.myMouseEvent(m); 

或者,你可以使用dispatchEvent(),如果你想通過事件系統。像

this.stage.addEventListener(MouseEvent.MOUSE_DOWN, this.myMouseEvent); 
this.dispatch(m); // stage will catch this event