2010-01-12 6 views
2

여러 자녀 SWF (Child_1, Child_2, Child_3) 간의 사용자 탐색을 처리하는 부모 SWF (부모)가 있습니다.AS3 : 동적으로로드하는 SWF의 객체에 이벤트 리스너를 어떻게 추가합니까?

하위 SWF의 탐색 버튼에 이벤트 리스너를 추가하여 사용자가 Child_1, Child_2 및 Child_3 사이에서 옆으로 이동할 수있게하려면 어떻게해야합니까?

나는 두 가지를 생각할 수 있지만, 얻을 수없는 둘 중 하나가 작동 : 그것은 아이를로드 할 때

1) 부모 SWF는 이벤트 리스너를 설정합니다. 그래서, 나는 Child_1을 로딩하기 위해 Parent의 로더를 사용하고, Parent는 Child_1.myNavigationform.myButton에 eventlistener를 추가한다.

여기서 문제는 부모가 로더 인스턴스 만 전달한다는 것이고 Child_1 내의 개별 개체를 어떻게 드릴 다운하는지 생각할 수 없다는 것입니다.

2) Child_1은 이벤트 리스너를 자체 객체에 추가합니다. 이것은 단지 문제를 역전시킵니다. Child_1은 자체 버튼에 액세스하는 데 아무런 문제가 없지만 사용자가이를 클릭하면 Child_2를로드 할 수 있도록 부모의 메서드에 액세스 할 수 없습니다.

해결 방법은 무엇입니까? 나는 이것이 자주 수행된다고 확신한다. 나는 이것을 처리하는 방법을 설명하는 것을 전혀 보지 못했다.

감사합니다.

답변

2

두 가지 모두 사용할 수 있습니다. 그러나 처음에는 느슨하게 결합 된 부모와 자식 영화를 제공하므로보다 융통성이 있습니다. 당신은 contentloaderinfo를 통해 아이 무비 클립을 얻을 수 있습니다.

_child1loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); 
_child1loader.load(child1URLRequest); 
function onComplete(e:Event):void { 
    _child1movie = MovieClip(e.target.content); 
} 
이제 이것을 부모 무비에 추가하고 해당 함수를 호출하고 청취자를 해당 구성 요소에 추가 할 수 있습니다.
두 번째 경우, 부모 영화 기능에 액세스하려면 그 내용을 자녀의 영화 안에 넣어야합니다. (예 : parent.somefunction();).
더 나은 구현은 각 하위 동영상이 이벤트 (즉, 로더 동영상 (이 경우 상위 동영상)에서 사용할 수있는 navigateNextEvent 등)를 통해 일부 기능을 제공하는 것입니다. 그래서이 경우 구현은 좋아질 것입니다.
public class Child1 extends MovieClip { 
    ... 
    private function onSomeButtonPressWhichWillAskParentToGoToNextChild():void { 
    dispatchEvent(new Event("navigateNext")); 
    } 
    ... 
} 
... 
public class Parent extends MovieClip{ 
... 
_child1movie.addEventListener("navigateNext", onNavigateNext); 
private function onNavigateNext(e:Event):void { 
//e.target is _child1movie, so you can play with it (hide it or throw it away etc...) 
//do actual naigation 
} 
... 
} 

관련 문제