2011-11-25 45 views
1

这是一个如果在根上的一个框架上的statern。我想环卡雷拉(一个lenghthy的movieclip)从框架2回框架1(用于测试目的)如果AS3中的语句无法正常工作

这是代码:

if (MovieClip(root).Carrera.currentFrame==2){ 
    MovieClip(root).Carrera.gotoAndPlay(1); 
} 

的movieclip 不断去,忽略if语句。 我在做什么?

回答

2

当你指望它有与if说法没有错误,它只是不被评估是。

当您将代码放在一个框架,它就会马上执行,当帧是进入。所以,第一帧开始时,执行if,其条件是当时错误的。而它永远不会被重新执行,因为你永远不会告诉它。在AS3中没有“常规”这样的东西;-)

取而代之的是,你可以通过添加一个事件监听器检查每一个框架:

addEventListener(Event.ENTER_FRAME, function (e) { 
    if (MovieClip(root).Carrera.currentFrame==2){ 
     MovieClip(root).Carrera.gotoAndPlay(1); 
    } 
}); 

或者,您可以只需将gotoAndPlay(1);卡雷拉的第二帧(不是根)上。

+0

很好的解释,我有一堆影片剪辑打电话给对方,现在我有一个单一的AS3框架呼吁所有的人都用funtions,感谢这个节省时间! –

+0

@加布里埃尔:很高兴能帮到你!您可能需要考虑使用文档类(外部文件),而不是将所有代码放在框架上 - 这使得更容易遵循。 – Cameron

0

需要测试的东西...

是否在执行时定义了MoveClip(root)?

是MoveClip(根).Carrera在执行的时候定义?

是影片剪辑(根).Carrera打(或者你就可以叫停,所以它的框架只是呆坐着1?

2

你要明白,你正在运行这个if语句只一次。即使Carrera剪辑在该时刻处于第2帧,该剪辑将跳转到播放1并继续播放 - 没有什么可以让它再次跳转,因此永远不会有循环。

为了这个工作,你必须一次又一次地运行相同的语句 - 每个剪辑跳转到一个新的帧的时间。

例如,可以通过一个为此)附加此脚本到帧卡雷拉剪辑(不是根的2 ):

gotoAndPlay(1); 

或b)将一个事件监听到它:

MovieClip(root).Carrera.addEventListener (Event.ENTER_FRAME, 
    function (ev:Event) : void { 
     var cl:MovieClip = ev.target as MovieClip; 
     if (cl.currentFrame == 2) cl.gotoAndPlay(1); 
    } 

还有更多的方法可以做到这一点,但除非你打算做更复杂的东西不是每一个现在,然后跳转到帧,我劝你去的第一个选项 - 看来你应该以前学习更多关于ActionScript的知识尝试事件监听器。

+0

谢谢,我现在明白了,我一直在玩功能,我完全忘记了ENTER_FRAME,我能够解决它。 –