我正在制作破砖游戏。我编码说当我在游戏中按下按钮时,游戏会回到主菜单。当我触摸开始按钮时,我想重新创建游戏。但是在传递了timer_StartCompletely后我的球没有移动。换句话说,我的timer_ball无效。我在onBackPressed上有这段代码:
@Override
public void onBackPressed()
{
if(status == INGAME) {
scene.detachChildren();
moveBall = false;
status = MENU;
ballX = (kamera.getWidth()/2)-(32/2);
ballY = (kamera.getHeight()/2)-(32/2);
ballSpeed = 3.5f;
cx = (kamera.getWidth()/2)-(cubukTex.getWidth()/2);
cy = kamera.getHeight()-25;
this.mEngine.unregisterUpdateHandler(timer_ball);
this.mEngine.unregisterUpdateHandler(timer_club);
timer_ball.reset();
musicBackground.play();
}
}
我的计时器声明:
timer_StartCompletely = new TimerHandler(0.5f, new ITimerCallback() {
@Override
public void onTimePassed(final TimerHandler pTimerHandler) {
mEngine.unregisterUpdateHandler(pTimerHandler);
mEngine.registerUpdateHandler(timer_ball);
}
});
在我的timer_ball中,我编码了球的移动(如果调用timer_ball,球肯定会移动)。
我还有一个触摸事件,我控制触摸按钮并注册timer_StartCompletely。
答案 0 :(得分:2)
在实例化TimerHandler
时,您可以传递一个名为pAutoReset
的参数(您没有传递它,因此传递了错误:
public TimerHandler(final float pTimerSeconds, final ITimerCallback pTimerCallback) {
this(pTimerSeconds, false /*pAutoReset*/, pTimerCallback);
}
此参数决定TimerHandler
是否应该在时间过后自动重置(这意味着如果传递true,则重复回调)。
此处出现问题:您没有通过true
,也未调用reset
的{{1}}方法。因此,如果我们查看TimerHandler
中的相关代码:
TimeHandler.java
您的回调会执行一次,现在if(!this.mTimerCallbackTriggered) {
this.mTimerSecondsElapsed += pSecondsElapsed;
if(this.mTimerSecondsElapsed >= this.mTimerSeconds) {
this.mTimerCallbackTriggered = true;
this.mTimerCallback.onTimePassed(this);
}
}
为mTimerCallbackTriggered
,因此它将不再执行。
解决方案:每次在注册true
之前调用reset
方法,或者使用TimerHandler
创建方法。