2011-05-04 3 views
0

현재 다른 3 개의 swf 파일을로드하는 부모 무비 클립에서 3 개의 uiloaders를 사용하고 있습니다. 이러한 영화 클립에는 각각 다른 사운드를 호출 할 때 발생하는 키보드 이벤트가 있습니다.uiloader가 언로드 된 경우에도 EventListener가 활성 상태입니다.

영화 클립으로 이동하여 부모에게 돌아올 때 문제가 있습니다. 이벤트 수신기는 여전히 활성화되어 있습니다. 나는 swf 파일을 언로드하는 것과 같은 다른 일을 시도해 왔지만, 이벤트는 여전히 활성화되어 있으며 포커스를 벗어난 후에도 직접 액세스 할 수 있습니다.

저는 스테이지에서 이벤트 리스너를 가지고 있지만 실제로 swf 파일에서 벗어난 후에 언로드하는 방법을 알지 못한다는 것이 확실합니다.

도움이 될 것입니다.

답변

1

정확합니다. 키보드 이벤트는 스테이지 (즉, stage.addEventListener (KeyboardEvent.KEY_UP, someFunction);)에 등록되는 경우가 대부분입니다. 즉 스테이지를 언로드하려고해도 무비에서 수집 한 가비지를 방지하는 무비 클립에 대한 참조가 스테이지에 있음을 의미합니다.

이 문제를 해결하는 방법에는 두 가지가 있습니다. keyboardListener의 등록을 취소하거나 stage.removeEventListener (KeyboardEvent.KEY_UP, someFunction)를 등록 취소해야합니다. 또는 청취자를 약한 참조로 등록 할 수 있습니다.

stage.addEventListener (KeyboardEvent.KEY_UP, someFunction, false, 0, true);

마지막 인수 (참)는 이벤트가 약한 참조로 등록되었음을 의미합니다. 기본값은 false입니다.

+0

약한 참조는 정확히 어떻게 작동합니까? 실제로 수집하기 위해 swf 파일을 언로드해야합니까? 아니면 포커스를 잃을 수 있습니까? 이것이 꼭 필요한 것 같지만 그것을 관리하는 방법을 정말로 이해하지 못합니다. – triangulito

+0

약한 참조를 사용하면 swf를 제거한 후에 더 이상 키 이벤트를 가져올 수 없습니다. 하지만 가장 올바른 일은 swf를 언로드하기 직전에 removeEventListeners를 호출하는 것입니다. 아마도 자체를 정리하는로드 된 swf에 destroy() - 메서드를 넣을 수 있습니다. 나는 그것을하는 것이 좋습니다. – Tommislav

+0

대단히 감사합니다. 매우 도움이되었습니다. :디 – triangulito

관련 문제