Flash as3事件监听器,用于影片剪辑停止时



我正在考虑制作一个在某些点停止的电影剪辑(只需使用stop();在影片剪辑时间轴上的某些关键帧,然后提示用户继续剪辑。

听电影片段停止的最好理由是什么?我想我想要一个事件监听器来检测电影剪辑何时停止,但我不知道是否有。

多谢

因为你必须通过stop()手动停止MovieClip,所以你可以使用dispatchEvent()轻松地在同一帧上手动调度自己的事件

例如,在一个框架中,你可以这样写:

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

这个MovieClip的监听器是:

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

有一个未公开的特性你可以使用;addFrameScript(一个MovieClip的函数);顾名思义,它将代码添加到某个框架中。这样就不需要帧监听器,而且可以动态地向关键帧添加代码。因此,知道影片剪辑何时结束将是;

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
}

骇人的破解方法是不断监听onEnterFrame:

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

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

嘿user1010076我不知道你是怎么让Marty的代码工作的。

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

我试了又试,然后发现这一行从介绍到事件处理在ActionScript 3.0

target.dispatchEvent(new Event("type"));

所以要让Marty的整个代码正常工作,你需要…

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

我有一个类似的用例,你的代码现在工作与"目标"添加,而我没有它。

最新更新