我通过加载器类将flash专业版cs5中创建的swf加载到flex 4.1应用程序中。 Flash文件包含多个为动作脚本导出的影片剪辑,这些影片剪辑存在于整个影片的许多实例中。我可以同时控制加载的swf中的多个movieclip实例吗?
遍历所有东西,比较类的类型似乎是最容易的,但也是解决这个问题的最多余方式。有什么办法使用类名作为一种全局选择器来访问剪辑?
我也可以让Flash中的子剪辑侦听他们执行某个动作的事件,但我不确定最好是什么。
我通过加载器类将flash专业版cs5中创建的swf加载到flex 4.1应用程序中。 Flash文件包含多个为动作脚本导出的影片剪辑,这些影片剪辑存在于整个影片的许多实例中。我可以同时控制加载的swf中的多个movieclip实例吗?
遍历所有东西,比较类的类型似乎是最容易的,但也是解决这个问题的最多余方式。有什么办法使用类名作为一种全局选择器来访问剪辑?
我也可以让Flash中的子剪辑侦听他们执行某个动作的事件,但我不确定最好是什么。
我想打出来的伎俩。我使用的事件的解决方案:
在根时间轴我把这样的功能:
function cause():void {
dispatchEvent(new Event("do stuff",true));
}
,并在库剪辑的主时间轴云:
DisplayObject(root).addEventListener("do stuff", function (e:Event=null) {
... whatever ...
});
这是肮脏的,但你得到这个想法。
在这些情况下,我发现解决问题的一个好方法是创建一个静态可访问的类来管理在实例化时注册的其他类的实例。作为一个例子...
public class GlobalStopper{
private static var clips:Array = [];
public static function add(mc:MovieClip):void{
clips.push(mc);
}
public static function stop():void{
var mc:MovieClip;
for(var i:int = 0, ilen:int = clips.length ; i < ilen ; i++){
mc = clips[i] as MovieClip;
if (mc) mc.stop();
}
}
}
和...
public class GloballyStoppableMovieClip extends MovieClip{
public function GloballyStoppableMovieClip(){
GlobalStopper.add(this);
}
}
任何及所有GloballyStoppableMovieClip的情况下,会立即与GlobalStopper注册,因此调用
GlobalStopper.stop();
...会停止所有注册的影片剪辑。
你可以添加任何你想要的其他功能。此外,不必添加接受MovieClip实例,您可以让它接受实现公共函数stop()和play()的动画片段子类的IStoppable或IPlayable对象(或者也可能需要停止并播放的非动画片段对象!)。然后执行。
但对于类似jQuery的选择器?不是我处理这个特定问题的方式。
也是一个不错的方法!谢谢,我也会给出一个想法! – DasAntonym 2011-03-02 22:24:40