我之前问过类似的问题并得到了很好的答复,所以如果这有点令人沮丧,我深表歉意。希望这会很快。我正在设计一个交互式 Flash 教程,以努力解释一个复杂的生物学问题,并且我已经构建了时间轴,以便不超过两帧和四层。我之前在舞台时间轴上设计过这个,但它变得非常困惑,并且出现了一些问题,所以我决定必须以这种方式重做。
它由三个主要部分组成 - 首先分两段淡入的标题,然后是两个按钮(在完全淡入之前被禁用),最后是在循环中无限期淡入和淡出的分子动画。然后,该页面将保持环境状态,直到用户单击其中一个按钮。
主时间轴上有四层 - 操作、按钮、分子和标题。每个都有相关的图像和动画。
我想对其进行编码,以便每个时间线依次播放,但我很难通过 AS3 访问其他时间线。
目前我在操作层中有这个:
import flash.events.Event;
NRPSText_mc.addEventListener(Event.ENTER_FRAME, FadeIn);
function FadeIn(event:Event):void
{
if (MovieClip(this.root).currentFrame > 0) {
NRPSText_mc.gotoAndPlay("NRPSFadeIn")
}
}
ColourButton_mc.addEventListener(Event.ENTER_FRAME, BtnFadeIn);
function BtnFadeIn(event:Event):void
{
if (NRPSText_mc.currentFrame == 30) {
ColourButton_mc.gotoAndPlay("ButtonPress")
}
}
从这里应该可以清楚地看出,我已经在每个时间轴中标记了某些事件,并且我希望它们在一个事件结束时播放。
问题是知道每个实例中的“.currentFrame”之前要放什么,但我在任何地方都找不到它!到目前为止,我已经能够使用“this”和“MovieClip(this.root)”,但我需要能够找出如何引用这些嵌入的时间线以使其工作。我已经用“trace”尝试过这些代码,它似乎工作正常,所以我认为这就是问题所在。
最佳答案
首先,如果您在主时间线上有代码而不是MovieClip(this.root).currentFrame
你可以只使用 currentFrame
因为您引用的是您设置脚本的对象。
第二个,这个
if (MovieClip(this.root).currentFrame > 0) {
NRPSText_mc.gotoAndPlay("NRPSFadeIn")
}
自调用每个帧以来,只会使 NRPSText_mc 停留在“NRPSFadeIn”标签处。
第三,如果舞台上有一个影片剪辑并且已设置其实例名称,则可以通过该实例名称从父范围(主时间线)引用其时间线,就像使用 NRPSText_mc.gotoAndPlay("NRPSFadeIn")
一样。 。如果您在该影片剪辑中有一个脚本,只需使用 gotoAndPlay()
和currentFrame
因为您与脚本位于同一个对象中。
而且你做的有点不对。常见的方法是使用时间轴动画或某种补间库,例如 TweenMax
。当您使用 Flash IDE 时,执行相同操作的正确方法如下:使用您想要的对象的任何动画创建单独的影片剪辑;将它们放在主时间轴上,该时间轴有自己的涉及这些剪辑的动画;在您想要控制内部剪辑的任何帧上使用 stop()
设置单独的脚本, gotoAndPlay()
等
如果您想在剪辑播放完毕时收到通知,请使用 AS3 事件。例如,您有一个名为 mc
的影片剪辑,在最后一帧添加脚本dispatchEvent(new Event("stopped!")); stop();
并在主时间线上
mc.addEventListener("stopped!", listener);
function listener(event:Event):void {
trace("mc stopped!");
}
这样比每次输入帧事件检查帧号要容易得多。
关于flash - ActionScript 3 中的 .currentFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9370058/