之前我问过一个类似的问题并得到了很好的答案,所以如果这有点令人沮丧,我会道歉。希望它会很快。我正在设计一个交互式Flash教程,试图解释一个复杂的生物学问题,我已经构建了时间轴,因此不超过两帧和四层。我之前在舞台时间轴上设计了它,但它变得如此混乱,并且有一些问题,我决定我必须这样重做。
它由三个主要部分组成 - 一个标题首先在两个片段中淡化,然后是两个按钮(在它们完全淡入之前被禁用),最后是在循环中无限淡入淡出的分子动画。然后页面保持环境直到用户单击其中一个按钮。
我在主时间轴上有四个图层 - 动作,按钮,分子和标题。每个都是相关的图像和动画。
我想对它进行编码,以便每个都依次播放,但我很难通过AS3访问其他时间轴。
目前我在Actions层中有这个:
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)”,但我需要能够找到如何引用这些嵌入式时间轴以使其工作。我用“跟踪”尝试了这些代码,它似乎运行正常,所以我认为这就是问题所在。
答案 0 :(得分:3)
首先,如果您在主时间轴而不是MovieClip(this.root).currentFrame
上有代码,则可以使用currentFrame
,因为您正在引用您设置脚本的对象。
第二,这个
if (MovieClip(this.root).currentFrame > 0) {
NRPSText_mc.gotoAndPlay("NRPSFadeIn")
}
自从每帧调用后,只会使NRPSText_mc保持在“NRPSFadeIn”标签。
第三,如果你在舞台上有一个动画片段,并且你已经设置了它的实例名称,你就可以像使用NRPSText_mc.gotoAndPlay("NRPSFadeIn")
那样通过该实例名称引用它的时间轴FROM父范围(主时间轴)。如果你有一个脚本INSIDE,那么movieclip只使用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!");
}
这样比每个enterframe事件检查帧号要容易得多。