2012-02-20 46 views
4

我之前问过类似的问题并收到了很好的答案,所以如果这有点令人沮丧,我很抱歉。希望这将是一个快速的。我正在设计一个交互式Flash教程,试图解释一个复杂的生物问题,并且我构建了时间线,以便不超过两个帧和四个层。我之前在舞台时间线上设计过它,但它变得非常混乱,并且出现了一些问题,我决定必须以这种方式重做它。。ActionScript 3中的当前帧

它由三个主要部分组成 - 一个标题首先在两个部分中淡入淡出,然后是两个按钮(在完全淡入之前被禁用)以及最终在循环中无限期淡入和淡出的分子动画。该页面保持环境直到用户单击其中一个按钮。

我对主时间轴四层 - 操作,按钮,分子和标题。在每个都是相关的图像和动画。

我希望让每个前一后连续地播放的代码,但我有真正的困难,通过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)”来获得,但我需要能够找出如何引用这些嵌入式时间线来使其工作。我已经试过这些代码“跟踪”,它似乎工作正常,所以我认为这是问题所在。

回答

3

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

其次,这种

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

只会让NRPSText_mc停留在 “NRPSFadeIn” 的标签,因为所谓的每一帧。第三,如果舞台上有一个动画片段,并且已经设置了它的实例名称,那么可以通过该实例名称引用它的时间线FROM父范围(主时间线),就像您使用NRPSText_mc.gotoAndPlay("NRPSFadeIn")所做的那样。如果你有一个剧本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事件容易得多。