2011-01-26 65 views
1

今天早上我偶然發現了這個問題:虛擬鼠標懸停AS3

當懸停一個按鈕,是否可以在X秒後自動點擊它?那麼用戶不需要用鼠標點擊它?

我該如何讓Flash相信我的鼠標確實點擊了舞臺上的某個按鈕或者帶有as3?

我的電影中有很多按鈕。所以我更喜歡使用一些代碼來覆蓋我電影中所有現有或即將上市的按鈕的功能。

我通常會使用這樣的代碼,但有一些解決方法來以不同的方式完成此操作嗎?我不想向每個按鈕添加代碼。

this.addEventListener(MouseEvent.OVER, onMouseClickEvent); 

public function onMouseClickEvent(event:Event) 
{ 
trace(event); 
if(event.buttonDown) // if button goes down normally 
trace("MOUSE CLICKED NORMALLY"); 
else 
trace("left button was not down"); 
} 

回答

2

我認爲最簡單的方法就是子類化Button。 就應該添加鼠標輸入/輸出監聽器,添加點擊監聽器,看起來像 :public function clickListener(event:MouseEvent = null){...}

當鼠標懸停時,提出一個標誌,鼠標在對象上,啓動一個定時器,當計時器回調函數被調用,你檢查是否標誌(你把標誌放下,當鼠標不在時)是真的,只需調用clickListener()

1

傾聽MouseEvent.MOUSE_OVER和啓動一個定時器,在其末端的按鈕將發送MouseEvent.CLICK事件。在鼠標懸停處理程序中,使用SystemManager爲MouseEvent.MOUSE_OUT添加一個偵聽器,取消定時器。定時器也使用SystemManager刪除偵聽器。那麼點擊按鈕。

+0

我理解的計時器。但是這樣我必須爲每個按鈕設置它。我想找到一個涵蓋所有按鈕的解決方案..任何想法? – Proto 2011-01-26 21:45:07

0

最後!解決了!

這奏效了:

公共職能的RunOnce(事件:TimerEvent):無效{ btnSignal.dispatch( 「鍵盤」,btnCode); }

Robusto & Radoslav Georgiev:謝謝你指點正確的方向!

0

(我正在回答這個有點晚,但想爲未來的人提供意見)。

'皮膚這隻貓'的一種方法是讓你的懸停事件觸發一個計時器(即3秒)。在EnterFrame或其他函數中,當達到3秒時,讓數字或布爾變化。

//Pseudo code 

    if(timer == 3) 
{ numberVar = 1; 
//or 
BooleanVar = True; 
} 
else 
{ 
numberVar = 0; 
//or 
BooleanVar = false; 
} 
//end 

然後就像你連你的方法的MouseEvent,連接這些同樣的方法火的時候,numberVar == 1或BooleanVar ==真。而已。

爲了超級簡單和可讀性,讓您的MouseClickEvent僅爲numberVar = 1或BooleanVar = True。

隨着時間的推移,這些變得非常簡單,而且根據我的經驗,'非常'是錯誤證明。在打字錯誤或其他情況下也可以很容易地修復。沒有超級難以捉摸的進口。希望有所幫助。順便說一下(+ 1)

大問題:d