2

我有一个父 SWF(父)处理多个子 SWF(Child_1、Child_2、Child_3)之间的用户导航。

如何将事件侦听器添加到子 SWF 上的导航按钮,以便用户可以在 Child_1、Child_2 和 Child_3 之间横向移动?

我可以想到两种选择,但不能让任何一种工作:

1) 父 SWF 在加载子时设置事件侦听器。因此,我在 Parent 上使用加载器来加载 Child_1,并在 Parent 中将 eventlisteners 添加到 Child_1.myNavigationform.myButton。

这里的问题是父级只处理加载器实例,我想不出它会如何深入到 Child_1 中的各个对象。

2) Child_1 将事件侦听器添加到它自己的对象中。这只是扭转了问题。Child_1 访问自己的按钮没有问题,但是当用户单击它们时,它无法访问父级上的方法,因此可以加载 Child_2。

这里有什么解决方案?我敢肯定这是经常发生的,我只是没有看到任何解释如何处理这个问题的东西。

谢谢你。

4

1 回答 1

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
 }
 ... 
}

于 2010-01-13T06:50:27.150 回答