ActionScript 3 中的 .currentFrame

4

我之前问过一个类似的问题,并得到了很好的答案,如果这个问题让您感到有些沮丧,我深表歉意。希望这会是一个快速解决的问题。我正在设计一个交互式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”,似乎运行良好,所以我认为问题就在这里。

1个回答

3

首先,如果您的代码在主时间轴上,而不是MovieClip(this.root).currentFrame,您可以直接使用currentFrame,因为您正在引用设置脚本的对象。

其次,this

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事件都检查帧数要容易得多。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接