我可以一次控制加载的swf中的多个动画片段实例吗?

时间:2011-03-02 22:01:40

标签: flex actionscript loader movieclip

我正在通过loader类将flash专业cs5中创建的swf加载到flex 4.1应用程序中。 Flash文件包含多个为动作脚本导出的动画片段,并且整个影片中的许多实例中都存在这些动画片段。

迭代所有内容,比较类类似乎是解决此问题的最简单但也是最冗余的方法。有没有办法使用类名作为一种全局选择器来访问剪辑?

我还可以让闪光灯中的子剪辑听取他们执行动作的事件,但我不确定什么是最好的。

2 个答案:

答案 0 :(得分:0)

在这些情况下,我发现解决问题的一个好方法是创建一个静态可访问的类来管理在实例化时向其注册的其他类的实例。举个例子......

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(); 

...将停止所有已注册的动画片段。

您可以添加所需的任何其他功能。此外,您可以让它接受实现公共函数stop()和play()的IStoppable或IPlayable对象,而不是添加接受MovieClip实例,您的movieclip子类(或者也可能需要停止和播放的非movieclip对象!)然后实现。

但是对于类似jQuery的选择器呢?不是我处理这个特定问题的方式。

答案 1 :(得分:0)

我打算输入它就可以了。我使用了事件解决方案:

在根时间轴中我放置了这样的函数:

function cause():void {
    dispatchEvent(new Event("do stuff",true));
}

并在库剪辑的主时间轴中:

DisplayObject(root).addEventListener("do stuff", function (e:Event=null) {
    ... whatever ...         
});

这很脏但你明白了。