我在第一次击球时被击球2次击中第2帧,第二次击中第3帧并且动画播放到第40帧。然后当前帧属性应该执行_root。 brickAmt - 在第40帧,但它不起作用。你能告诉我为什么吗?我该如何解决这个问题?谢谢!
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 --;
}
答案 0 :(得分:1)
正如所提到的评论一样,在时间轴上编写代码通常不是一个好习惯,但这里有一些注意事项:
1-除非您将代码放在每个关键帧中,否则它将只执行一次。 1.1-如果你希望它执行每一帧而不需要制作几十个关键帧并在任何地方进行复制,你应该把它放在一个函数中,让这个函数在一些监听器上调用,理想情况是在event.enter_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 --;
}
}
答案 1 :(得分:0)
如果此代码不在每个帧运行的函数内,并且有超过40帧,则可能会错过它通过第40帧。 如果没有,请检查 this 的时间表,并确保在到达第40帧之前没有其他任何内容正在中断它的进度。
您还可以将一个trace语句放入ENTER_FRAME函数中,以查看它是否在两者之间停止。
// in a function inside the object that runs every frame
trace(this.currentFrame);