2010-01-20 101 views
6

我希望我的动画片段播放一次并在最后一帧停止。我在我的movieclip类的循环中使用以下代码。 (这是as3)在最后一帧停止(闪光灯)

if(currentFrame == 120) 
stop(); 

120是最后一帧。它只播放一次。但问题是它又回到第1帧。有没有更好的方法来停止特定帧上的动画片段。

+1

你最终找到了正确的答案吗?如果是这样,请将其标记为正确 – 2012-01-10 07:41:53

回答

3

在时间轴上,您可以在最后放置一个关键帧,然后在那里添加stop();方法。当它到达该帧时,将执行stop();方法,并且剪辑将停止。

假设您使用的是时间轴,但听起来像是你。

+0

我正在使用附加到动画片段的自定义类。我想从那里做,但如果我不能,我想我必须解决你的解决方案。 – numerical25 2010-01-20 13:59:42

+0

我给了一个尝试,它没有工作。它仍然从第1帧开始。我追溯了当前的框架。显示它可以追溯到1 – numerical25 2010-01-20 14:09:08

+0

嗯,这意味着还有其他事情正在发生。您是否使用嵌套的动画片段来创建动画?它们是否被正确停止?也许如果你能分享更多关于你如何设置事物的信息,我们可以帮助你追踪它。 – 2010-01-20 17:33:42

0

这似乎是沿着你要找什么线条更:

addEventListener(Event.ENTER_FRAME, function(e:Event){ 
    if(currentFrame == totalFrames){ 
     stop(); 
     removeEventListener(event.type, arguments.callee); 
    } 
}); 

我添加了一个事件侦听器(针对ActionScript 3)等每一帧此功能将火和检查什么镜框上。如果它是最后一帧,它将停止。基于你的例子,我假设你有一个扩展MovieClip的类。

+1

这会工作,但在性能方面却是一个相当差的解决方案。这个框架将继续开火,无法清理。与此类似的更好的动态解决方案是使用addFrameScript方法。当然,如果你有一个函数的参考,你可以清理它,它会没事的。 – 2010-01-20 05:51:55

+0

我同意泰勒。匿名功能也很糟糕,因为他们在进入gc之前已经长时间呆在内存中了。 – alecmce 2010-01-20 07:42:20

+0

所以我想timeline中的stop()函数是要走的路。我实际上为我的所有动画片段使用了一个单一的循环,所以我宁愿它不在事件监听器中。感谢您的回复球员 – numerical25 2010-01-20 14:02:30

0

从乱搞机智它,我知道这个问题与Flash没有响应我的stop()函数无关。我相信这可能与Flash两次调用动画片段有关。一个在另一个之上。让它看起来像重新开始。我不确定。如果我在其他地方调用动画片段,它就可以工作。只是不在我的循环。我确实做了一次追踪,追踪只显示一次,这表明它启动了一次。

12

如果您想使用actionscript来完成此操作,而不是手动向时间轴上的最后一帧添加stop(),那么您可以使用未公开的addFrameScript()方法。

mc.addFrameScript(mc.totalFrames - 1, function():void 
{ 
    mc.stop(); 
}); 

不记得功能的范围,但可以使用mc.stop()或stop()。

*编辑 - 新增-1到addFrameScript的第一个参数,因为它是基于零(所以把一个frameScript上框架你会把)。

+0

你是一个拯救生命的人!我甚至没有考虑在时间线上添加停止,只是在需要时调用'play()'。 – 2016-01-10 03:46:19

0

我想通了。老实说,我认为我的申请是有缺陷的。它奇迹般地工作,我什么也没做。在我的循环中,我做了if(currentframe == totalframes),以前没有发生什么现在正在发生完美。我不知道为什么。但正如我所说,这可能是一个软件问题,因为我有时会遇到通过构造函数传递值的问题。并且必须创建特殊的方法来接受这些值。

3

最简单的方法:

  1. 只需选择在时间线中的最后一帧。打开操作窗格(F8)。确保选中的框架仍处于选中状态,如果不是,则在“操作”窗格打开时再次选择。
  2. 选择后,只需在'Action-Frame'窗格中添加简单的stop()函数即可。

    //add the following line to the actions pane of the last frame. 
    stop(); 
    
  3. 你完成了。如有需要,您可以选择添加重播按钮。

+0

如果它不符合您的自定义类别 – Sagar 2011-09-07 19:00:55

+1

我不知道您使用哪种工具,但它看起来像您使用Adobe Flash。如果您使用Adobe Flash CS6,请打开“动作”面板(F8)错误。打开动作面板(F9)。 – kongkea 2013-09-23 03:54:27