0

我正在做一个破砖游戏。我编写了代码,当我在游戏中按下返回按钮时,游戏会返回主菜单。当我触摸开始按钮时,我想重新创建游戏。但是在 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。

4

1 回答 1

2

实例化您的时TimerHandler,您可以传递一个名为pAutoReset(您没有传递它,因此传递了 false 的参数:

public TimerHandler(final float pTimerSeconds, final ITimerCallback pTimerCallback) {
   this(pTimerSeconds, false /*pAutoReset*/, pTimerCallback);
}

此参数决定是否TimerHandler应该在时间过去后自动重置(这意味着如果您传递 true,则重复回调)。

这里的问题:你没有通过,true也没有调用reset. TimerHandler因此,如果我们查看以下相关代码TimeHandler.java

if(!this.mTimerCallbackTriggered) {
    this.mTimerSecondsElapsed += pSecondsElapsed;
    if(this.mTimerSecondsElapsed >= this.mTimerSeconds) {
        this.mTimerCallbackTriggered = true;
        this.mTimerCallback.onTimePassed(this);
    }
}

你的回调执行一次,现在mTimerCallbackTriggeredtrue,所以它不会再执行了。

解决方案reset:要么在每次注册之前调用该方法TimerHandler,要么使用pAutoReset = true.

于 2012-12-12T01:10:49.487 回答