ActionScript Mouseevent.clone ()가 깨진 것처럼 보입니까?
-
05-09-2019 - |
문제
나는 시도하는 문제에 빠졌다 Redispatch Actionscript 3의 마우스 이벤트. 나는 그것을 좁혔다 MouseEvent.clone()
방법이 완전히 깨졌습니다. 다음 이벤트 처리기 :
private function handleMouseMove( evt : MouseEvent ) : void
{
trace("mousemove", evt.stageX, evt.stageY);
var newEvt : MouseEvent = evt.clone() as MouseEvent;
trace("mousemoveclone", newEvt.stageX, newEvt.stageY);
}
다음 출력, ad infinitum의 결과 :
mousemove 167 206
mousemoveclone 0 0
이것은 내가 mouseevent를 받고있는 코드가 무엇을 받고 있는지에 맞추었기 때문에 깨진 클론 기능에 대한 나의 가설이 있습니다.
이것은 내가 뭔가를 놓치지 않는 한 링크 된 문서가 나타나야하는지에 직접적으로 모순됩니다. 나는이 행동을 일으킬 수있는 내가 한 일 (또는하지 않았던)에 대해 완전히 상실하고 있습니다. AS3 남자들이 자신의 문서를 읽는 것을 정말로 잊었습니까? Event.clone()
?
특정 사용 사례에 기능 객체를 사용 하여이 문제를 해결할 수는 있지만 원하는 것을 선호합니다. 어떤 아이디어?
편집하다: LocalX와 Localy 회원들은 제대로 복제되고있는 것처럼 보이며, 여기서 무슨 일이 일어나고 있는지에 대한 손실을 더 많이받습니다.
해결책
그것은 알려진 버그입니다. 여기에서 버그 보고서를 볼 수 있습니다. http://bugs.adobe.com/jira/browse/fp-343
그래도 다른 모든 것은 복제되어야합니다. 버그가 고정 될 때까지 항상 Stagex와 Stagey를 수동으로 할당 할 수 있습니다.
다른 팁
나는이 스레드가 7 개월 휴면이라는 것을 알고 있지만, 이것을 조금 업데이트하기 위해서는 FP10과 Flex4에서 여전히 활성화되어 있습니다. 이벤트를 redispatch하면 발생합니다. 즉:
private function mouseListener( e:MouseEvent ):void
{
dispatchEvent( e );
}
DispatchEvent () 호출은 클론 ()과 동일하게 보이므로 Stagex와 Stagey는 0으로 설정됩니다.
이것은 꽤 오래된 질문이지만 솔루션을 위해 Google에 글을 썼을 때 발생했으며 여기에있는 것은 포괄적이지 않습니다.
이것이 "고정"되지 않은 이유는 그것이 의도 한대로 작동하기 때문입니다. Stagex 및 Stagey 값은 이벤트 대상을 사용하여 LocalToglobal 변환을 수행하여 Getter를 호출 할 때 계산됩니다. 이벤트가 발송 된 이후 대상 객체가 위치, 스케일 또는 회전이 변경된 경우에도 숫자가 올바르게 유지되도록 필요합니다.
올바른 Stagex 및 Stagey 값을 가진 Mouseevent를 실제로 redispatch 해야하는 경우 두 가지 옵션이 다음과 같습니다.
Stagex와 Stagey Getters를 무시하는 Mouseevent의 사용자 정의 서브 클래스를 만듭니다. 원래 대상을 저장하고 LocalToglobal 계산을 직접 수행하거나 원래 이벤트를 복제 할 때있는 값을 사용하여 Stagex 및 Stagey의 정적 값을 저장할 수 있습니다.
스프라이트를 확장하고 발송자를 무대에 추가하여 재고 Mouseevent가 제대로 작동하도록합니다.