Эффективный по времени Gameloop в J2ME - PullRequest
1 голос
/ 18 июня 2009

Я задал ряд вопросов о разработке игр J2ME, а недавно Нил Коффи прокомментировал

Как побочный вопрос - вы ДЕЙСТВИТЕЛЬНО хотите сделать 100 тиков в секунду в игре J2ME? Как я думаю, что sb упомянул, вы действительно должен спать на следующий желаемая точка пробуждения, а не фиксированная продолжительность каждый раз.

По какой-то причине, эта штука застряла у меня в голове, и теперь я хочу получить ответы, что мне нужно, чтобы мой геймпул уснул до желаемой точки пробуждения , я не знаю, где это точка xD (теоретически).

Ради обратной связи, это упрощенная версия моей игры:

public void run() {
    Graphics g = this.getGraphics();
    while (running) {
        long diff = System.currentTimeMillis() - lastLoop;
        lastLoop = System.currentTimeMillis();
        input();
        this.level.doLogic();
        render(g, diff);
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            stop(e);
        }
    }
}

Спасибо за вашу помощь !!

Ответы [ 2 ]

3 голосов
/ 18 июня 2009

Здесь есть отличная статья об игровых циклах здесь , если вы ее еще не читали.

Исходя из моего опыта написания игр для J2ME, вы захотите свести к минимуму то, как много вы делаете в игровом цикле, так как плохо написанный игровой цикл может быстро разрядить батарею телефона. То есть, если вы рендерите 10 миллисекунд, обязательно проверьте, изменилось ли что-нибудь, а если нет, пропустите.

1 голос
/ 18 июня 2009

Если вы решите, что хотите рендерить каждые 10 миллисекунд, то вы:

loop {
  - record current time; render
  - do input/logic
  - check the current time, and calculate elapsed time
    - if less than 10 ms has elapsed, calculate the remaining time (10 millis - elapsed time); sleep for this duration
}

Я понимаю, что могут быть проблемы с разрешением таймера (например, Thread.sleep (10) может не спать ровно 10 мс; а System.currentTimeMillis () может не возвращать результаты с детализацией до 1 мс). Это зависит от платформы.

...