2014-12-01 67 views
0

我有第一次打到第二帧的第二次击球的砖块,第二次打到第三帧并且动画播放到第40帧。然后当前帧属性被假定执行_root.brickAmt - 在第40帧,但它不起作用。你能告诉我为什么吗?我该如何解决这个问题?谢谢!as3当前帧检查

if (this.hitTestObject(_root.mcBall)){ 
    if (this.currentFrame == 1){ 
    this.gotoAndStop(2) 
    } else if (this.currentFrame == 2) {      
       this.gotoAndPlay(3) 
     } 
     if (this.currentFrame == 40) {      

removeEventListener(Event.ENTER_FRAME, enterFrameEvents); 
       _root.brickAmt --; 
     } 

回答

1

正如评论所说,在时间轴上书面方式代码通常不是一个很好的做法,但这里有一些事情需要注意:

1 - 除非你把你的代码在每一个关键帧,它会执行一次。 1.1-如果你希望它执行每一帧没有做几十个关键帧,并复制到任何地方,你应该把它放在一个函数里,让这个函数在一些监听器上调用,理想情况下调用event.enter_frame

2- if检查框架是否为40,在检查撞击内,你确定框架40,球和砖是否触摸?

3-我也不能确定你正在使用AS2或AS3,在AS3 _root应该由MovieClip(根)来代替

编辑: 因为我使用我无法打开的.fla一个旧版本,但相当于你在评论中说的话我敢肯定代码应该是这样的:

private function enterFrameEvents(event:Event):void{ 
    // [...] previous code 
    if (this.hitTestObject(_root.mcBall)){ 
    if (this.currentFrame == 1){ 
     this.gotoAndStop(2) 
    } else if (this.currentFrame == 2) {      
     this.gotoAndPlay(3) 
    } 
    } // <- Notice this 
    if (this.currentFrame == 40) {      
    removeEventListener(Event.ENTER_FRAME, enterFrameEvents); 
    _root.brickAmt --; 
    } 
} 
+1

是的,它是As3 ....困难的部分是不应该在第40帧发生冲突,它应该只是执行砖Amt--当它到达该帧。如果你删除} 如果(this.currentFrame == 40)它工作的机器人没有去帧40,因此没有动画。你可以看看吗? https://app.box.com/s/whbrlx5lrr7avmsx3a9k – Johnnien 2014-12-03 17:51:42

+0

非常感谢你!就是这样......只是一个括号......我很抱歉,我没有立即看到你的答案的更新....(已经有警告禁止从这个网站的要求这样愚蠢的问题)。你很棒!谢谢! – Johnnien 2014-12-04 20:18:47

+0

没有ofense,但看起来你的代码是如何格式化的(在你提供的源代码上)并不奇怪。 只是一个提示,adobe flash在你编写代码的地方有一个按钮,它可以自动格式化代码,所以它看起来不奇怪,并希望你可以避免愚蠢的错误。 – Ignasi 2014-12-04 22:44:24

0

如果这个代码不运行的每一帧的功能里面,有超过40架,你可能会错过它传递40帧 如果没有,检查的的时间表,并确保没有否则在它到达帧40之前正在中断它的进度。

您还可以将一条trace语句放入ENTER_FRAME函数中,以查看它是否在任何位置之间停止。

// in a function inside the object that runs every frame 
trace(this.currentFrame); 
+0

谢谢!如果我有if(this.hitTestObject(_root.mcBall))if(this.currentFrame == 1){this.gotoAndStop(2) } else if(this.currentFrame == 2){ this .gotoAndPlay(3)}它的工作原理。我可以说这个。 gotoandPlay 3到40,然后执行brickAmt--。我如何在代码中使用它? – Johnnien 2014-12-02 15:13:44

+0

我试过trace(this.currentFrame);我认为这是行不通的,因为它是从一个更大的项目的15个框架中的一个班级中调用的。 – Johnnien 2014-12-02 15:14:40

+0

可能有一百万个原因,具体取决于嵌套对象的结构,时间轴上的代码以及每个时间轴上的哪个部分是给定时间的程序流。 – 2014-12-02 17:38:17