重置AndEngine中的游戏问题

时间:2012-12-11 18:12:34

标签: android andengine

我正在制作破砖游戏。我编码说当我在游戏中按下按钮时,游戏会回到主菜单。当我触摸开始按钮时,我想重新创建游戏。但是在传递了t​​imer_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。

1 个答案:

答案 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创建方法。