Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash AS3:如何将事件侦听器添加到我';我在动态加载吗?_Flash_Actionscript 3_Navigation_Swfloader - Fatal编程技术网

Flash AS3:如何将事件侦听器添加到我';我在动态加载吗?

Flash AS3:如何将事件侦听器添加到我';我在动态加载吗?,flash,actionscript-3,navigation,swfloader,Flash,Actionscript 3,Navigation,Swfloader,我有一个父SWF(parent),它处理多个子SWF(Child_1、Child_2、Child_3)之间的用户导航 如何将事件侦听器添加到子SWF上的导航按钮,以便用户可以在Child_1、Child_2和Child_3之间横向移动 我可以想出两种选择,但两种都不可行: 1) 父SWF在加载子SWF时设置事件侦听器。因此,我在父级上使用加载程序加载子级_1,并在父级中将eventlisteners添加到子级_1.myNavigationform.myButton 这里的问题是,父对象只处理lo

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

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

我可以想出两种选择,但两种都不可行:

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

这里的问题是,父对象只处理loader实例,我想不出它将如何深入到Child_1中的各个对象

2) Child_1将事件侦听器添加到它自己的对象中。这正好相反。子_1访问自己的按钮没有问题,但当用户单击按钮时,它无法访问父级上的方法,以便加载子_2

这里的解决方案是什么?我相信这是经常做的,我只是没有看到任何东西可以解释如何处理这个问题


谢谢。

他们两个都可以。但第一个更灵活,因为它提供了松散耦合的父电影和子电影。您可以通过contentloaderinfo获取子movieclip。现在您可以将其添加到父电影中并调用其函数,将侦听器添加到其组件中。
在第二种情况下,如果您想访问父电影功能,则需要将其放入子电影中。(例如parent.somefunction();)。
更好的实现方式是,每个子电影都通过调度事件(如NavigateExtent等)提供一些功能,加载程序电影可以使用这些事件,如本例中的父电影)。因此,在这种情况下,实现将是这样的

_child1loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
_child1loader.load(child1URLRequest);
function onComplete(e:Event):void {
  _child1movie = MovieClip(e.target.content);
}
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
 }
 ... 
}