如何在停止前完成循环电影的完成?

时间:2017-04-02 09:14:00

标签: actionscript-3 flash animation adobe

我正在制作一个水滴掉落的漏水物体。我希望一旦点击其他对象就会停止泄漏。当我使用stop();它只是停下来,水滴停在空中。当然我不想要这个,我该如何解决?

Bloempoteetkamer.addEventListener(MouseEvent.CLICK, rotplanteetkamer);

Bloempoteetkamer.buttonMode=true;
Bloempoteetkamer.mouseChildren=false;

function rotplanteetkamer(evt:MouseEvent){
    Planteetkamer.play()
    Druppel.stop()
    Bloempoteetkamer.removeEventListener(MouseEvent.CLICK, rotplanteetkamer);
    Bloempoteetkamer.buttonMode=false;
    stop();
}

Bloempoteetkamer是您必须单击以停止泄漏的对象。 Druppel是落下的水滴。 Planteetkamer是一个不同的电影,当我点击Bloempoteetkamer时播放。

2 个答案:

答案 0 :(得分:3)

您可能希望使用EnterFrame选项在播放MClip(Druppel)期间检查它是否实际到达最终帧,然后才应该MClip stop()

试试这样:

Bloempoteetkamer.addEventListener(MouseEvent.CLICK, rotplanteetkamer);

Bloempoteetkamer.buttonMode=true;
Bloempoteetkamer.mouseChildren=false;

function rotplanteetkamer(evt:MouseEvent){
    Planteetkamer.play();
    //Druppel.stop();
    Druppel.addEventListener(Event.ENTER_FRAME, check_if_LastFrame);
    Bloempoteetkamer.removeEventListener(MouseEvent.CLICK, rotplanteetkamer);
    Bloempoteetkamer.buttonMode=false;
    stop();
}


function check_if_LastFrame(target : Event) : void
{
    if (target.currentFrame == target.totalFrames) 
    {
        Druppel.stop();
        Druppel.removeEventListener(Event.ENTER_FRAME, check_ifLastFrame);
    }
}

答案 1 :(得分:1)

另一个更紧凑的选项是使用AddFrameScript。 addFrameScript方法将代码注入到MovieClip的特定帧中,就像使用Adobe Animate中的工具一样。

这是一个创建可重用函数的示例,用于在影片剪辑下次到达最后一帧时停止它:

function stopClipAfterLastFrame(clip:MovieClip):void {
    //addFrameScript to the last frame that calls an inline function
    clip.addFrameScript(clip.totalFrames-1, function(){
        clip.stop(); //stop the clip
        clip.addFrameScript(clip.totalFrames-1, null); //remove the frame script so it doesn't stop again the next time it plays
    });
}

所以,如果你调用stopClipAfterLastFrame(Druppel),它会在到达最后一帧时停止它。

  

请记住,addFrameScript是一个未记录的功能 - 这意味着它可能在某些未来的Flash播放器/ AIR版本中不再起作用 - 尽管这在此时不太可能。删除框架脚本(通过传递null作为函数)以防止内存泄漏也非常重要。