2012-12-21 45 views
0

我想在Flash應用程序中創建自己的按鈕。下面是一些代碼:Flash中的MouseEvent

addEventListener(MouseEvent.MOUSE_OUT, Out); 
addEventListener(MouseEvent.MOUSE_OVER, Over); 

... 

private function Over(event:MouseEvent):void 
{ 
    addChild(overImage); 
} 

private function Out(event:MouseEvent):void 
{ 
    removeChild(overImage); 
} 

當鼠標移動到該按鈕,overImage閃爍。看起來像OverOut正在調用每個幀。我究竟做錯了什麼?

回答

3

如果鼠標位於overImage將出現的位置,那麼該子對象將導致其自身上的MOUSE_OVER事件,從而導致其父項上的事件。父母MOUSE_OUT將從顯示列表中刪除overImage,並且將再次導致父母上的MOUSE_OVER,再次啓動循環並使overImage閃爍。

1

既然你用Flex標記了這個;爲什麼不使用Flex Button

MouseOver事件將在鼠標移動時持續觸發。我會調用addChild看是否overImage已有父之前進行檢查:

private function Over(event:MouseEvent):void 
{ 
    if(!overImage.parent){ 
    addChild(overImage); 
    } 
} 

private function Out(event:MouseEvent):void 
{ 
    if(overImage.parent){ 
    removeChild(overImage); 
    } 
} 

我懷疑,這將防止「閃爍」。

+0

這不是halp,但根據您的建議,我解決了我的問題。 – SentineL

0

只要考慮使用MouseEvent.ROLL_OVERMouseEvent.ROLL_OUT事件。他們忽略了組件的孩子。沒有任何額外的檢查和醜陋的技巧。

順便說一下,按鈕支持皮膚和狀態,所以你可以將圖像包含在'over'狀態。

1

像其他人說,使用ROLL_OVER和ROLL_OUT來代替,或者設置button.mouseChildren = false。

它閃爍的原因是因爲MOUSE_OVER和MOUSE_OUT將針對該按鈕的每個孩子。所以如果你有任何文字,或者一個BG圖像/顏色,或者一個閃光或者其他元素,那麼每當你翻轉任何這些部分時,它就會發射。

因此,當您添加「overImage」時,它會出現在鼠標下方,並觸發另一個mouseOut和mouseOver。再次,只需使用ROLL_OVER和ROLL_OUT,或設置mouseChildren = false