Actionscript 3 as3当前帧检查

Actionscript 3 as3当前帧检查,actionscript-3,action,frame,collision,Actionscript 3,Action,Frame,Collision,我有一块砖块,在第一次击中时被球击中2次,它进入第2帧,在第二次击中时进入第3帧,动画播放到第40帧。那么当前frame属性应该在第40帧上执行_root.brickam--,但它不起作用。你能告诉我为什么吗?我怎样才能解决这个问题?谢谢 if (this.hitTestObject(_root.mcBall)){ if (this.currentFrame == 1){ this.gotoAndStop(2) } else if (this.currentFrame

我有一块砖块,在第一次击中时被球击中2次,它进入第2帧,在第二次击中时进入第3帧,动画播放到第40帧。那么当前frame属性应该在第40帧上执行_root.brickam--,但它不起作用。你能告诉我为什么吗?我怎样才能解决这个问题?谢谢

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 --;
        }

如果此代码不在每帧运行的函数中,并且有40多个帧,则通过第40帧时可能会错过它。 如果没有,请检查此操作的时间线,并确保在到达第40帧之前,没有任何其他操作会中断其进度

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

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

正如前面提到的评论,在时间轴上编写代码通常不是一个好的做法,不过这里有几点需要注意:

1-除非在每个关键帧中放入代码,否则它将只执行一次。 1.1-如果您想让它执行每一帧,而不需要制作几十个关键帧并将其复制粘贴到任何地方,则应将其放入函数中,并让该函数在某个侦听器上调用,最好是在事件中。输入\u frame

2-如果检查帧为40,则在如果检查命中测试的内部,您确定在帧40上,球和砖块接触吗

3-我也不确定您使用的是AS2还是AS3,在AS3中,root应该替换为MovieClip(root)

编辑: 我无法打开.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 --;
  }
}
私有函数enterFrameEvents(事件:事件):void{
//[…]以前的代码
如果(this.hitTestObject(_root.mcBall)){
如果(this.currentFrame==1){
这是第二站
}如果(this.currentFrame==2){
这是一个游戏(3)
}

}//谢谢!如果我有最多If(this.hitTestObject(_root.mcBall)){If(this.currentFrame==1){this.gotoAndStop(2)}或者If(this.currentFrame==2){this.gotoAndPlay(3)}它可以工作。我可以这样说吗。gotoAndPlay 3到40,然后执行brickart--。我应该如何在代码中对它进行措辞?我试过跟踪(此.currentFrame);我认为它不起作用,因为它是从一个较大项目的15个框架中的一个类调用的。这可能有一百万个原因,这取决于嵌套对象的结构,时间轴上的代码在哪里,以及每个时间轴上的哪个部分是给定时间的程序流。尝试在其中开发东西是非常糟糕的方法这样。我建议您开始学习如何在关键帧上编写最少或不编写代码的情况下开发应用程序。我只建议您停止正在做的一切,观看有关OOP的官方ActionScript教程,以及如何编写程序并将代码收集到文件中。整洁。我建议您观看第45集沃德。那是关于OOP的。谢谢!我看了其中一些情节,但没有一个能回答我的问题。事实上,这是一个我已经有很长时间的问题。在每一个游戏中,我们都会看到动画在进入另一个关卡或其他动作之前播放,我从来没有在任何地方看到过这种解释。我的应用程序是用最少的代码编写的,但不幸的是,由于这个问题,我无法继续研究它。在这一点上,它就像一座山。是的,它是As3…困难的部分是第40帧上不应该有碰撞,它应该在到达该帧时执行brick Amt。如果删除}If(this.currentFrame==40)它可以在不进入第40帧的情况下正常工作,因此没有动画。你能看一下吗?非常感谢!就是这样…只有一个括号…很抱歉,我没有立即看到你答案的更新…(本网站已经警告禁止问像这样愚蠢的问题)。你太棒了!谢谢!不用了,但是看到你的代码是如何格式化的(在你提供的源代码上)并没有那么奇怪。只是一个提示,adobe flash在你编写代码的地方有一个按钮,可以自动格式化代码,这样看起来就不会奇怪了,希望你能避免愚蠢的错误。