当动画片段停止时,Flash as3事件侦听器

时间:2011-10-24 00:56:03

标签: flash actionscript-3

我正在考虑制作一个在特定点停止的动画片段(仅使用stop();在动画片段时间轴中的某些关键帧处),然后提示用户继续剪辑。

为什么要听停止动画片段的最佳原因是什么?我想我想要一个事件监听器来检测动画片段何时停止,但我不知道是否有一个。

非常感谢

4 个答案:

答案 0 :(得分:6)

由于您必须通过stop()手动停止MovieClip,因此您可以使用dispatchEvent()

轻松地在同一帧上手动调度您自己的事件

例如,在您可以拥有的框架上:

stop();
dispatchEvent(
    new Event("movieclip_stopped");
);

该MovieClip的监听器将是:

myMovie.addEventListener("movieclip_stopped", _stopHandler);
function _stopHandler(e:Event):void
{
    trace('mc was stopped');
}

答案 1 :(得分:2)

您可以使用未记录的功能; addFrameScript(MovieClip的一个功能);正如其名称所示,它将代码添加到某个帧中。这样您就不需要framelistener,并且可以动态地将代码添加到关键帧。所以知道动画片到达终点的时候会是;

mc.addFrameScript(mc.totalFrames - 1, onMcEnded);
function onMcEnded():void {
    trace("last frame of movieclip");
}

如果你想制作一个具有某些标签的动画片段,然后对这些标签进行操作,一种方法就是这样做。(我想这对于那些不想添加代码的人来说是非常常见的代码直接在时间轴上)

假设您在时间轴上添加了两个标签:askUser1和askUser2

在这些标签上添加互动的方式如下:

for each(var frameLabel:FrameLabel in mc.currentLabels) {
      configureLabel(frameLabel.name,frameLabel.frame-1)                
}

protected function configureLabel(labelName:String,labelFrame:int):void 
{
    switch(labelName) {                 
        case "askUser1" :
                mc.addFrameScript(labelFrame, onAskUser1);
        break;                  
        case "askUser2" :   
                mc.addFrameScript(labelFrame, onAskUser2);
        break;
    }           
}
private function onAskUser1():void{
     //do stuff for askUser1 Label
}
private function onAskUser2():void{
     //do stuff for askUser2 Label
}

答案 2 :(得分:1)

骇人听闻的解决方案是不断倾听onEnterFrame

var isPlaying:Boolean = false;
var lastFrame:int = 0;
addEventListener(Event.ENTER_FRAME, function(event:Event):void
{
    isPlaying = (lastFrame != currentFrame);
    lastFrame = currentFrame;
});

更好的解决方案是根据您的stop()代码实际跟踪状态。

答案 3 :(得分:0)

user1010076我不知道你是如何让Marty的代码工作的。

stop();
dispatchEvent(
    new Event("movieclip_stopped");
);

我尝试过,然后从Introduction to event handling in ActionScript 3.0

找到了这一个班轮
target.dispatchEvent(new Event("type"));

因此,要让Marty的整个代码工作,你需要..

myMovie.dispatchEvent(new Event("movieclip_stopped"));

我有一个类似的用例,代码现在可以使用添加的“目标”,而我没有使用它。