我正在制作一个水滴掉落的漏水物体。我希望一旦点击其他对象就会停止泄漏。当我使用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时播放。
答案 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作为函数)以防止内存泄漏也非常重要。