2009-05-30 2 views
1

나는 맨 아래로 갈 수없는 비정상적인 행동을하고 있습니다. 이것을 실행할 때 swf 영역으로 이동하면 마우스 이동시 정상적으로 추적됩니다. 예상되는.AS3 프로젝트 - 응용 프로그램 외부에서 반응하는 마우스 이동 수신기

화면에서 을 클릭하면 이동 이벤트를 추적합니다. 클릭하고 끌면 브라우저의 swf 영역으로 이동하는 것처럼 추적됩니다.

다음은 코드입니다. 베어 본 (barebones)으로 간소화했습니다. Flex에있는 "Engine"이라는 빈 AS3 프로젝트에 이것을 넣으면됩니다. 명백히 따옴표가 없습니다.

package { 
import flash.display.Sprite; 
import flash.events.MouseEvent; 

[SWF(width='640', height='360', backgroundColor='#888888', frameRate='31')] 
public class Engine extends Sprite 
{  
    public function Engine() 
    { 
     // Add the mouse handlers 
     stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
    } 

    public function mouseMoveHandler(evt:MouseEvent):void 
    { 
     trace("move"); 
    } 
} 
} 

해결 방법 나는 하나의 MOUSE_OVER를 MOUSE_OVER를 추가하고 MOUSE_OUT에서 제거했습니다. 그러나 그 행동은 여전히 ​​매우 이례적인 것처럼 보이며 나는 그것이 왜 일어나고 있는지 이해하는데 관심이 있습니다.

아무도 내가 응용 프로그램의 실제 단계에 제약을받는 사건을 어떻게 지킬 수 있습니까?

답변

0

플래시 동영상 내부를 클릭하고 마우스를 외부로 드래그하면 마우스를 놓을 때까지 MOUSE_MOVE 이벤트가 계속 트리거됩니다. MOUSE_LEAVE는 플레이어 밖으로 마우스를 놓을 때만 트리거됩니다. 이것이 바로 Flash Player의 작동 방식입니다.

아마도 내가 틀렸지 만이 동작을 변경할 수 있다고 생각하지 않습니다.

+1

예, 그 의미를 다음과 같습니다

여기에 수정이있다. 이것은 내가 말하는 행동이 아닙니다. 화면에서 * ANYWHERE *를 클릭하면 ... 다른 응용 프로그램, 사과 바, 무엇이든 ... 이동 이벤트를 등록합니다. Flash가 집중할 수있는 방법이 없다고하더라도. – grey

+0

죄송합니다. 코드에서이 동작을 재현 할 수 없습니다. FP 버전, OS 등 자세한 내용을 게시 할 수 있습니까? –

+0

응답 지연으로 인해 유감스럽게 생각합니다. 플래시 플레이어 버전 - 디버그, MAC 10,0,22,87 – grey

1

이미 언급했듯이 이러한 이벤트가 실행되지 않도록 할 수는 없습니다. 마우스를 놓을 때까지 트리거됩니다.

MouseEvent의 좌표를 스테이지의 경계와 비교하고 바깥 쪽을 무시할 수 있습니다.

public function mouseMoveHandler(evt:MouseEvent):void 
{ 
    if (evt.stageX >= 0 && evt.stageX <= stage.stageWidth && 
     evt.stageY >= 0 && evt.stageY <= stage.stageHeight) 
    { 
     trace("move"); 
    } 
} 
+0

다시. swf 나 브라우저에 초점이 맞춰 졌을 때만 이야기하는 것이 아닙니다. ANY 클릭은 모든 애플리케이션에서 포커스를 이동 이벤트를 등록합니다. – grey

관련 문제