андроид игра петля сна - PullRequest
2 голосов
/ 27 ноября 2011

Я работаю над мини-игрой для Android.Я использую этот код для игрового цикла.

private RefreshHandler mRedrawHandler = new RefreshHandler();

class RefreshHandler extends Handler {

    @Override
    public void handleMessage(Message msg) {
        Panel.this.update();
        Panel.this.invalidate();
    }

    public void sleep(long delayMillis) {
        this.removeMessages(101);
        sendMessageDelayed(obtainMessage(101), delayMillis);
    }
};

public void update() {
    if (mMode == RUNNING) {
        ball.update(NR_PIX);

        for (int i=0; i<N; i++) {
            bords[i].update(NR_PIX);
        }

        Panel.lastBordHeight -= NR_PIX;

        if (mYBrickOffset == 0)
            mYBrickOffset = mYBrick;

        mYBrickOffset -= NR_PIX; 

        mRedrawHandler.sleep(mMoveDelay);
    }
}

Класс RefreshHandler взят из примера класса SnakeView.

Код работает нормально.У меня есть кнопка «Активность для новой игры».Когда я впервые вхожу в активность, это работает.Но если я выйду из игры и снова введу скорость, то я не пойму и не пойму.Если я выйду из игры и войду снова с помощью кнопки «Новая игра», скорость будет еще выше.

Может кто-нибудь помочь мне с этим?

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Мне удалось решить проблему с переопределением onPause в Activity.Вот новый код:

class RefreshHandler extends Handler {
    Handler h = new Handler();
    Run run = new Run();

    class Run implements Runnable {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            Panel.this.update();
            Panel.this.invalidate();
        }
    }

    public void sleep(long delayMillis) {
        h.postDelayed(run, delayMillis);
    }

    public void sleepCanceled() {
        h.removeCallbacks(run);
    }
};
0 голосов
/ 27 ноября 2011

Скорость вызываемого update () никогда не бывает одинаковой.Один цикл может занять 16 миллисекунд, а следующий цикл может занять только 14 миллисекунд, и он будет продолжать меняться с течением времени.

Вам нужно попытаться заставить его зацикливаться с фиксированной скоростью, это обеспечит выполнение вашей игры муравьемпостоянная скорость.

Попробуйте прочитать это: http://obviam.net/index.php/the-android-game-loop/, и здесь есть интересное обсуждение: http://www.java -gaming.org / index.php? topic = 21372.0

...