【问题标题】:AS3 Frame script executing immediately rather than when specifiedAS3 框架脚本立即执行,而不是在指定时执行
【发布时间】:2012-10-16 11:17:23
【问题描述】:

我有以下代码应该添加一个MovieClip 并向MovieClip 添加一个帧脚本,以便在剪辑完成播放后执行。然而,下面显示的代码会在添加 MovieClip 后立即触发框架脚本,我不知道为什么。

function debugClick(e:MouseEvent) : void
{    
  nextLevAnim = new NextLevelAnim();
  gfx.addChild(nextLevAnim);
  nextLevAnim.addFrameScript(nextLevAnim.totalFrames, NextLevel);
}

function NextLevel() : void
{
  nextLevAnim.addFrameScript(nextLevAnim.totalFrames, null);

  // Actions....
}

我尝试过使用更简单的示例,它工作正常,MovieClip 的长度为 21 帧,我尝试通过totalFramestotalFrames - 1 触发帧脚本,但没有任何想法!

【问题讨论】:

  • 究竟是什么意思?我尝试了totalFrames - 1 并得到了相同的结果。
  • 意思是 nextLevAnim.totalFrames - 1. 你是否在 NextLevelAnim 中包含了 stop()?

标签: actionscript-3 flashdevelop flash-cs6


【解决方案1】:

嗯,我与addFrameScript 合作的时间不多,所以我不知道是什么导致了这些问题,但你可以尝试使用 hack。

使用 onEnterFrame 侦听器并检查当前帧是否等于帧数 (-1)。 这并不理想,但如果你坚持这一点,它可能会做到。

addFrameScript 而言,我的猜测是它不起作用,因为 addMovieClip 直到循环的渲染部分才会生效,因此添加的子项的总帧数仍然为 0。您可以为onAddedToStageonAdded 添加一个监听器,并在MovieClip 初始化后添加addFrameScript 事件处理程序

【讨论】:

  • 这就是我现在最终要做的,虽然不理想,但嘿,如果它有效,它就有效!
【解决方案2】:

在这种情况下,totalFrames 变量是什么?你试过trace()吗?我很确定它不包含 nextLevAnim 中总帧数的正确值,您应该改用 nextLevAnim.totalFrames

【讨论】:

  • 抱歉打错了,应该是nextLevAnim.totalFrames。我已经使用跟踪来确定函数 NextLevel() 在声明帧脚本后立即被调用,而不是在 nextLevAnim 播放完毕时被调用。
猜你喜欢
  • 1970-01-01
  • 2023-02-24
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 2012-10-10
相关资源
最近更新 更多