Вопрос

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

  

Как побочный вопрос - вы ДЕЙСТВИТЕЛЬНО хотите   сделать 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);
        }
    }
}

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

Это было полезно?

Решение

Если вы решите, что хотите рендерить каждые 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 мс). Это зависит от платформы.

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top