加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash – ActionScript 3中的.currentFrame

发布时间:2020-12-15 07:23:37 所属栏目:百科 来源:网络整理
导读:之前我问了一个类似的问题并得到了很好的答案,所以如果这有点令人沮丧,我道歉.希望它会很快.我正在设计一个交互式Flash教程,试图解释一个复杂的生物学问题,我已经构建了时间轴,因此不超过两帧和四层.我之前在舞台时间线上设计了它,但它变得如此混乱,并且有一
之前我问了一个类似的问题并得到了很好的答案,所以如果这有点令人沮丧,我道歉.希望它会很快.我正在设计一个交互式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)”,但我需要能够找到如何引用这些嵌入式时间轴以使其工作.我用“跟踪”尝试了这些代码,似乎工作正常,所以我认为这就是问题所在.

解决方法

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

第二,这个

if (MovieClip(this.root).currentFrame > 0) {
    NRPSText_mc.gotoAndPlay("NRPSFadeIn")
}

自从调用每帧以来,只会使NRPSText_mc保持在“NRPSFadeIn”标签.

第三,如果你在舞台上有一个movieclip并且你已经设置了它的实例名称,你可以像使用NRPSText_mc.gotoAndPlay(“NRPSFadeIn”)那样通过该实例名称引用它的时间轴FROM父范围(主时间轴).如果你有一个脚本INSIDE,那么movieclip只使用gotoAndPlay()和currentFrame,因为你和脚本在同一个对象中.

你也这样做有点不对劲.常见的方法是使用时间轴动画或某种补间库,如TweenMax.当您使用Flash IDE时,执行相同操作的正确方法如下:使用您想要的对象的任何动画创建单独的动画片段;把它们放在主时间轴上,它有自己的动画涉及这些剪辑;在你想要控制内部剪辑的任何帧上,使用stop(),gotoAndPlay()等设置单独的脚本.

如果您希望在剪辑完成播放时收到通知,请使用AS3事件.例如,你有一个名为mc的movieclip,将一个脚本添加到最后一帧dispatchEvent(new Event(“stopped!”));停();在主要时间表

mc.addEventListener("stopped!",listener);
function listener(event:Event):void {
  trace("mc stopped!");
}

这样,每个enterframe事件检查帧编号要容易得多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读