我之前问过一个类似的问题,得到了一个很好的答案,所以如果这有点令人沮丧的话,我道歉。希望这将是一个快速的过程。我正在设计一个交互式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)”获得,但我需要能够找到如何引用这些嵌入的时间线来使其工作。我已经用"trace“尝试过这些代码,它似乎工作得很好,所以我认为这就是问题所在。
发布于 2012-02-21 12:51:10
首先,如果您的代码位于主时间轴上,而不是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!");
}这种方式比检查每个enterframe事件的帧数要容易得多。
https://stackoverflow.com/questions/9370058
复制相似问题