2012-12-21 8 views
0

플래시 응용 프로그램에서 직접 단추를 만들려고합니다. 다음은 몇 가지 코드입니다.MouseEvent in flash

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); 
} 

마우스가이 버튼 위에있을 때 이미지 초과가 깜박입니다. OverOut이 각 프레임을 호출하는 것처럼 보입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

3

마우스가 overImage이 표시 될 지점에 위치하면 해당 자식 개체는 MOUSE_OVER 이벤트를 발생시키고 따라서 해당 부모에 MOUSE_OUT 이벤트가 발생합니다. MOUSE_OUT 부모는 디스플레이 목록에서 overImage을 제거하고 부모를 통해 MOUSE_OVER을 다시 발생시키고 루프를 다시 시작하여 overImage을 깜박입니다.

1

이것을 Flex로 태그 지정 했으므로 Flex Button을 사용하지 않으시겠습니까?

마우스가 움직이면 MouseOver 이벤트가 계속 발생합니다. 나는 overImage 이미 부모가되어 있는지 확인하기로 addChild 호출하기 전에 검사를 수행합니다 :

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

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

내가 그는 "깜박임"을 방지 할 수 있습니다 생각한다.

+0

이는 중단되지 않았지만 조언에 따라 문제를 해결했습니다. – SentineL

0

MouseEvent.ROLL_OVERMouseEvent.ROLL_OUT 이벤트를 사용해보십시오. 그들은 구성 요소의 하위를 무시합니다. 추가 검사 및 추악한 속임수없이.

그런데 버튼은 스킨과 상태를 지원하므로 이미지를 '오버'상태로 포함 할 수 있습니다.

1

다른 사람이 ROLL_OVER 및 ROLL_OUT을 대신 사용하거나, 또는 button.mouseChildren = false로 설정했듯이.

깜박이는 이유는 해당 버튼의 모든 하위에 대해 MOUSE_OVER 및 MOUSE_OUT이 있기 때문입니다. 따라서 텍스트, 또는 bg 이미지/색상, 광택 또는 내부의 다른 요소가 있으면 그 부분을 롤오버 할 때마다 발사됩니다.

그래서 "overImage"를 추가하면 마우스 아래에 표시되고 다른 mouseOut 및 mouseOver가 발생합니다. 다시 ROLL_OVER 및 ROLL_OUT을 사용하거나 OR을 설정합니다. mouseChildren = false