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

コールバックは1回実行されますが、現在mTimerCallbackTriggeredtrue実行されているため、もう実行されません。

解決策reset:を登録する前に毎回メソッドを呼び出すか、を使用してメソッドTimerHandlerを作成しpAutoReset = trueます。

于 2012-12-12T01:10:49.487 に答える