2011-04-17 54 views

回答

9

尽管它很疯狂,但没有内置的方法来做到这一点(尽管它应该是)。两个选项都有一个标志,当您调用播放/停止时您会交换。

var mc_playing:Boolean = false; 

mc_playing = true; 
mc.play(); 



mc_playing = false; 
mc.stop(); 

或者您可以扩展MovieClip类来创建您自己的播放属性。

class SuperMovieClip extends MovieClip { 
    private var _playing:Boolean = false; 

    public function SuperMovieClip() { 

    } 

    override public function play():void { 
     _playing = true; 
     super.play(); 
    } 

    override public function stop():void { 
     _playing = false; 
     super.stop(); 
    } 

    public get function playing():Boolean { 
     return _playing; 
    } 

} 

接下来,只要你的MC链接SuperMovieClip而不是影片剪辑

+0

我已经想到了这一点,但我想使这个在“干净”的方式 – takayoshi 2011-04-17 12:18:49

+2

第二种方式是相当“干净”。一旦设置完成,你所需要做的就是'if(mc.playing == true)' – Chris 2011-04-17 12:23:26

+1

这是最干净的方式:) – RasmusWL 2011-04-17 12:51:50

0

如果你不想将覆盖您可以创建一个控制器类来处理这些类型的检查上一次更新的核心类。控制器持有剪辑以检查和存储currentFrame的更新。使用这种方法,您可以使用一个控制器来控制许多剪辑,并且只询问控制器是否正在播放剪辑。稍后可以轻松地为控制器添加功能,而无需更改要检查的类。

_controller = new TimelineClipController(); 
_controller.add(_animationClip1); 
_controller.add(_animationClip2); 

// on update (ENTER_FRAME, CUSTOM EVENT or TIMER) 
_controller.update(); 

// check if playing 
trace(_controller.isClipPlaying(_animationClip1)); 

做的另一种方法是添加脚本运行。我个人不喜欢这个,但在某些情况下,它可以很好。假设你添加

//add script to star timeline on frame 2 
_animationClip1.addFrameScript(1, frameFunction); // (zero based)