2009-09-09 4 views
0

이것은 많은 상황을 겪었지만 결코 좋은 해결책을 찾지 못하는 상황입니다. 롤오버에서 약간 움직이는 동영상 클립이 있지만 동영상 클립의 가장자리 위로 마우스를 올려 놓으면 깜박임이 계속되어 mouseOver 및 mouseOut 이벤트가 계속 수신됩니다. 이걸 어떻게 처리하니? 다시 말하지만, 일반적으로 동영상 클립 또는 버튼의 크기를 트위닝 할 때 문제가됩니다.as3 - 버튼 또는 동영상 클립 크기를 조절할 때 깜박임 제어

my_mc.addEventListener(MouseEvent.MOUSE_OVER, mOver); 
my_mc.addEventListener(MouseEvent.MOUSE_OUT, mOut); 

private function mOver(m:MouseEvent) {    
    TweenLite.to(m.target, .2, { scaleX:1.1, scaleY:1.1}); 
} 

private function mOut(m:MouseEvent) { 
    TweenLite.to(m.target, .2, { scaleX:1, scaleY:1}); 
} 

답변

1

나는 당신이 무슨 뜻인지 알고 : 클립을 통해 또는 클립의 크기를 조정할 그러나 hitTest 영역에서 커서를 가져다/계약 확대로 애니메이션 자체가 원하지 않는 입력 이벤트를 생성합니다. 아이디어의

커플 :

  1. 오버레이 명확한 스프라이트는 버튼 영역의 역할과 내용이 포함 된 또 다른 자식 객체의 크기를 조절합니다.
    즉, 마우스 입력 이벤트가 발생하는 객체는 일정한 크기를 유지합니다. 시각적 아티팩트 만 치수를 변경합니다.
  2. (더 간단하게) 전환 중에 이벤트 핸들러를 제거하고 onComplete 속성에 의해 발생하는 콜백 함수에 다시 추가합니다 TweenLite 애니메이션 오브젝트의 :
my_mc.addEventListener(MouseEvent.MOUSE_OVER, _animate); 
my_mc.addEventListener(MouseEvent.MOUSE_OUT, _animate); 

private function _animate(event:MouseEvent):void 
{ 
    var mc:Sprite = event.target as Sprite;   
    var animScale:Number = (event.type == MouseEvent.MOUSE_OVER) ? 2 : 1; 

    TweenLite.to(mc, 0.5, { 
     onStart: function():void { 
      mc.removeEventListener(MouseEvent.MOUSE_OVER, _animate); 
      mc.removeEventListener(MouseEvent.MOUSE_OUT, _animate); 
     }, 
     scaleX: animScale, 
     scaleY: animScale, 
     onComplete: function():void { 
      mc.addEventListener(MouseEvent.MOUSE_OVER, _animate); 
      mc.addEventListener(MouseEvent.MOUSE_OUT, _animate); 
     } 
    }); 
} 
+0

난 당신이 게시 코드를 시도했다. 롤오버에서는 아무 일도 발생하지 않으며 _animate는 즉시 두 번 호출됩니다. –

+0

아마도 이것은 의사 코드라고 명시 적으로 말했어야했지만, 내가 제공 한 일반적인 아이디어를 기반으로 자신의 구현을 시도하지 않는다는 것을 깨닫지 못했습니다. 문제는 _animate 핸들러에서 mouseEnabled 속성을 설정하는 이상한 동작이었습니다. 전환하는 동안 이벤트 수신 대기를 중지하도록 변경했습니다. –

관련 문제