2010-04-07 50 views
3

我只是將這個超級簡單的代碼示例扔進Flash CS4 IDE框架腳本中,但它不會在控制檯中輸出任何內容。我只是將鼠標放在窗口上,不點擊任何東西,也沒有任何事情發生。爲什麼不按照我的預期工作?Event.MOUSE_LEAVE不能在AS3中工作

stage.addEventListener(Event.MOUSE_LEAVE, traceMouse); 

function traceMouse(Evt:Event):void 
{ 
trace("Mouse Left Stage"); 
} 

________________________________________________

[編輯]我發現Event.MOUSE_LEAVE難以置信沒用。首先,它在測試環境中不起作用(至少在Mac OS X上爲Flash CS4)。第二,它不火,如果是的MouseEvent.MOUSE_DOWN當前活動:

Flash CS4 Professional中的ActionScript 3.0語言參考:

更新09年8月11日:新增資格 不觸發該事件時,按鈕按下了 。 1

在我的特定情況下,我想MOUSE_LEAVE到,而我,這樣的情況下,用戶拖動他/她的鼠標指針從舞臺這將觸發調用stopDrag()拖着一個對象觸發。因爲這是不可能的,我決定在實際對象上使用MOUSE_OUT,而不是在對象的父級或舞臺上使用MOUSE_LEAVE。

private function mouseDownHandler(evt:MouseEvent):void 
    { 
    object.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); 
    object.startDrag(false, pullBounds); 
    } 

private function mouseUpHandler(evt:MouseEvent):void 
    { 
    object.removeEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); 
    object.stopDrag(); 
    } 

private function mouseOutHandler(evt:MouseEvent):void 
    { 
    object.stopDrag(); 
    } 
+0

它的工作原理在Flash CS4 IDE對我來說(Win XP的),但事實上,同時按下鼠標的它不工作使它完全沒用,Adobe現在真的很煩人,順便說一句,你在哪找到這個註釋?這個鏈接doe沒有工作。 – 2011-04-12 16:57:33

+0

它是在flash 10.1的flash.display.Stage.mouseLeave的10.0文檔中編寫的,但它們似乎有刪除它 – TheDarkIn1978 2011-04-13 02:42:17

回答

1

我不認爲在創作環境中,該特定事件的作品,嘗試發佈HTML包裝,並在瀏覽器中運行它。

+0

在發佈之前我發現了這個問題,看起來有些人不能使用IDE來工作,而另一些人認爲他們是瘋狂的,並且對他們的工作沒有任何問題,它可能是一組婷?是的它在瀏覽器中發佈時對我有用 – TheDarkIn1978 2010-04-07 21:23:00

+1

它可能是操作系統相關的東西,我儘可能遠離Flash編寫代碼類型的東西,所以我從未真正遇到過這個問題。 – grapefrukt 2010-04-07 21:59:29

+0

這是一個聰明的理論。如果你是正確的,我不會感到驚訝,因爲MouseEvent.MOUSE_WHEEL在Mac OS X上根本不起作用(這就是我使用的) – TheDarkIn1978 2010-04-07 22:27:38

3

這裏有一對夫婦的其他技巧性的東西就知道(在瀏覽器中運行時):

一個奇怪的事情是,在Chrome + Firefox中,則不會調度爲OPAQUETRANSPARENT一個WMODE的MOUSE_LEAVE事件。它只是不開火 - 鼠標向下或向上。

WINDOW它工作正常。那一個花了我很長時間才發現! GRR ... http://bugs.adobe.com/jira/browse/FP-892


第二,確保你使用Event的參數類型,請Event.MOUSE_LEAVE處理程序,而不是MouseEvent。如果您嘗試使用e:MouseEvent來處理MOUSE_LEAVE,則會出現一個您可能永遠不會看到的錯誤(除非您使用的是調試閃存播放器)。這是一個非常容易犯的錯誤,因爲你可能會指示所有其他處理程序採用相同的方法。

這裏是我做的:(只是我的主要endDragmouseLeave(e:Event)

stage.addEventListener(MouseEvent.MOUSE_MOVE, drag); 
stage.addEventListener(MouseEvent.MOUSE_UP, endDrag); 
stage.addEventListener(Event.DEACTIVATE, endDrag); 
stage.addEventListener(Event.MOUSE_LEAVE, mouseLeave); 

private function mouseLeave(e:Event):void 
{ 
    endDrag(new MouseEvent("MOUSE_LEAVE")); 
} 

public function endDrag(evt:MouseEvent):void 
{ 
    /// handle end drag 
} 
+1

@ TheDarkIn 1978我意識到你沒有在這裏犯第二個錯誤 - 但我總是忘記這一點,它可能很容易錯過 – 2011-05-18 19:59:17

相關問題