1

로컬 SWF를로드 한 다음 해고 된 일부 이벤트를 잡으려고하는데 왜 작동하지 않는지 알 수 없습니다.AS2 : MovieClipLoader를 통해로드 된 SWF/MovieClip에서 addEventListener를 사용하는 방법

가 여기에 내가이 일 것이라고 기대했다 코드

Parent.swf

_mcl = new MovieClipLoader(); 
_mcl.addListener(this); 
_mcl.loadClip("Child.swf", rotator_mc); 

function onLoadComplete(clip) { 
    clip.addEventListener("initAsLoaded", function() {trace("childLoaded loaded 1")}); 
} 

function onLoadInit(clip) { 
    clip.addEventListener("initAsLoaded", function() {trace("childLoaded loaded 2")}); 
} 

child.swf를 이제

import mx.events.EventDispatcher; 

function dispatchEvent() {}; 
function addEventListener() {}; 
function removeEventListener() {}; 

EventDispatcher.initialize(this); 

trace("Child dispatching: childLoaded"); 
dispatchEvent({type:"childLoaded", target: this}); 

, 그리고 부모가있을 것 "childLoaded 2를 붙 잡았다" 그 흔적에 있지만, 그렇지 않습니다.

내가하려는 일을 성취 할 수있는 방법이 있습니까?

답변

2

내가 알아 차린 첫 번째 사실은 부모님이 initAsLoaded이라는 이벤트를 나열하고 있지만 자식에게는 childLoaded이라는 이벤트를 파견하고 있다는 사실입니다. 파견되지 않을 이벤트를 듣는 것은 좋은 생각이 아닙니다.

그러나 이벤트를 수정해도 문제가 해결되지 않기 때문에 실제 문제는 아닙니다. 주된 문제는 MovieClipLoaderonLoadInit 이벤트가 다음에 으로 전달되고 child.swf의 첫 번째 프레임 코드가 실행되었다는 것입니다. 이것은 child.swf에서 onLoadInit이 아직 호출되지 않았기 때문에 아무도 듣지 않는 첫 번째 프레임에서 이벤트를 전달한다는 의미입니다.

이 문제를 해결하기 위해 두 번째 프레임부터 child.swf로만 이벤트를 전달할 수 있습니다.

부모 첫 번째 프레임 :

var rotator_mc = _root.createEmptyMovieClip("rotator_mc", _root.getNextHighestDepth()); 

_mcl = new MovieClipLoader(); 
_mcl.addListener(this); 
_mcl.loadClip("child.swf", rotator_mc); 

function onLoadComplete(clip) { 
    trace("onLoadComplete " + clip + ", " + clip.addEventListener); 
    clip.addEventListener("initAsLoaded", function() {trace("childLoaded loaded 1")}); 
} 

function onLoadInit(clip) { 
    trace("onLoadInit " + clip + ", " + clip.addEventListener); 
    clip.addEventListener("initAsLoaded", function() {trace("childLoaded loaded 2")}); 
} 

이 부모의 첫 번째 프레임의 내 버전입니다. 컨테이너 역할을하는 빈 무비 클립을 만들어야했고 이벤트 핸들러에 흔적을 추가했습니다.

아이 첫 번째 프레임 :

import mx.events.EventDispatcher; 

EventDispatcher.initialize(this); 

아이 두 번째 프레임이 도움이

stop(); 

this.dispatchEvent({type:"initAsLoaded", target: this}); 

trace("Child dispatching: childLoaded"); 

희망 ...

+0

가 대단히 감사합니다, 내 문제를 해결했다. 인위적인 예를 들어 사과드립니다. :) –

관련 문제