2010-09-27 286 views
1

我有一個我添加了MouseEvent.MOUSE_OUT監聽器的影片剪輯。 hitTestPoint沒有給出正確的結果

movieclip.addEventListener(MouseEvent.MOUSE_OUT, removeMovieClip); 

現在邏輯是去除上MOUSE_OUT影片剪輯和其重新添加到階段上的另一按鈕的MouseOver。預期功能類似於顯示一些信息的滑塊

在這種情況下,MouseEvent.MOUSE_OUT觸發不能如預期那樣正常工作。當我將鼠標從快速移動的移動夾快速啓動時,它會觸發。如果我非常緩慢地退出它不會觸發,因此動畫片段仍在舞臺上。

可能是什麼問題?

更新:我忘了提,我使用hitTestPoint以測試鼠標是影片剪輯之外。在大多數情況下,如果我慢慢移動鼠標,hitTestPoint沒有給出正確的結果(錯誤),它位於Movieclip之外,因此我無法移除該對象。

更新2:讓我重新說明這個問題。我想我弄糟了這個解釋。
鼠標事件正常工作。

movieclip.addEventListener(MouseEvent.MOUSE_OUT 

正確着火,我在事件處理方法。現在,當我試圖確定是否出現此影片剪輯時出現問題。

private function removeObj(eve:Event):void 
{ 
    var e:MouseEvent = MouseEvent(eve); 
    if (m_wishlistImage) 
    { 
     var InsideSlot:Boolean = eve.currentTarget.hitTestPoint(e.stageX, e.stageY); 
     if(!InsideSlot){ 

雖然緩慢移動鼠標移出對象InsideSlot的仍然是正確的,因此代碼流不走的if條件內,因此我無法取出異物。

在跟蹤e.stageX時,我發現它經常顯示的座標不是鼠標移出時的座標(顯示槽內的一個點)。當我慢慢遷出時,這種行爲最常出現。

可能是什麼原因?

+1

嘗試使用ROLL_OUT,它對我來說似乎更加健壯。 – alxx 2010-09-27 16:22:16

回答

1

嘗試聆聽MouseEvent.ROLL_OUT事件。

+0

不工作.... – 2010-09-27 17:03:01

+0

它必須工作。 :)檢查問題是否在其他地方,也許你在同一個空間上有更多的圖層? – vulkanino 2010-09-27 17:23:25

+0

已更新問題 – 2010-09-27 17:37:12

0

如果您的MovieClip的mouseChildren屬性未設置爲false,則在您希望取決於MovieClip的內容之前觸發MOUSE_OUT事件似乎是合理的。

1

那麼,如果您將MouseEvent.MOUSE_OUT代碼替換爲Event.ENTER_FRAME事件,則可以解決此問題。您需要使用它,因爲鼠標移動有時也不會在Mouse-Event監聽器中捕獲,這是因爲swf幀速率通常太快以至於無法跟蹤鼠標移動,因此請使用Event.ENTER_FRAME。

我以前遇到過這樣的問題。所以添加監聽器到這樣的舞臺

addEventListener(Event。ENTER_FRAME,removeMovieClip)

現在去除容器中的對象或MovieClip之前,把檢查也很喜歡

公共職能removeMovieClip(EVT:事件):無效

{

如果(ParentClip.contains (ChildClip))ParentClip.removeChild(ChildClip)..

}

+0

ROLL_OVER和MOUSE_OVER有一點區別。當電影剪輯或顯示對象包含兩個或更多個子控件時,將鼠標移動到子控件中時,每次鼠標移動時都會觸發MOUSE_OVER事件。而每次在將鼠標聚焦到其他位置後指向父容器或其任何子節點時,將調用ROLL_OVER一次。在鼠標的MainContainer或任何顯示對象中移動鼠標不會觸發ROLL_OVER事件。 – 2010-09-29 13:27:58

4

檢查你的鼠標位置是階段座標(不是您的小孩動畫片段座標)。

換句話說確保您使用stage.mouseX, stage.mouseY,而不是隱含使用影片剪輯內的本地成員變量(這將給相對於影片剪輯鼠標的位置。)

hitTestPoint 需要點給予作爲舞臺座標。

+0

謝謝,它幫助了我 – 2012-01-21 12:52:52

相關問題