Создание игрового цикла (помощь во время сна) - PullRequest
0 голосов
/ 09 сентября 2011

Я использовал этот урок для создания игрового цикла.

В разделе, отмеченном «FPS зависит от постоянной скорости игры», есть пример кода, который включает в себя команду Sleep

Я погуглил эквивалент в java и обнаружил, что это

Thread.sleep();

, но он возвращает ошибку в затмении

Unhandled exception type InterruptedException

Что на земле это значит.

А еще мне было интересно, что методы

update_game();
display_game(); 

могут содержать в игре opengl-es (т. Е. Где обновляется рендерер и что происходит в display_game ();

В настоящее время я использую систему, которая использует функции GLSurfaceView и GLSurfaceRenderer

Вот моя адаптация кода в руководстве

public Input(Context context){
    super(context);
    glSurfaceRenderer = new GLSurfaceRenderer();
    checkcollisions = new Collisions();
    while (gameisrunning) {
    setRenderer(glSurfaceRenderer);


    nextGameTick += skipTicks;
    sleepTime = nextGameTick - SystemClock.uptimeMillis();
    if(sleepTime >= 0) {
        Thread.sleep(sleepTime);
    }else{
        //S*** we're behind
    }

    }

Это называется в моем GLSurfaceView, хотяЯ не уверен, что это правильное место для реализации этого.

Ответы [ 3 ]

2 голосов
/ 10 сентября 2011

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

Поток выдает исключение , когда прерывается. Вы должны сказать Java, как справиться с этим.

Чтобы прямо ответить на ваш вопрос, вот метод, который спит до определенного времени:

private void waitUntil(long time) {
    long sleepTime = time - new Date().getTime();

    while (sleepTime >= 0) {
        try {
            Thread.sleep(sleepTime);
        } catch (InterruptedException e) {
            // Interrupted. sleepTime will be positive, so we'll do it again.
        }
        sleepTime = time - new Date().getTime();
    }
}

Вы должны понять хотя бы этот метод, прежде чем продолжить разработку игры.

1 голос
/ 22 февраля 2015

Как ни странно, код Рона Ромеро не работает. С этим связаны две проблемы: цикл while и переменная sleeptime.

Переменная sleepTime устанавливается на основе заданного времени (в миллисекундах) для сна. Он занимает время и вычитает его из текущего миллисекунды. Проблема в том, что текущее время в миллисекундах является огромным числом (отсюда тип переменной long), что обеспечивает ОТРИЦАТЕЛЬНОЕ число sleepTime. Вы никогда не войдете в цикл while с этим кодом.

Второе, что не так - это проверка цикла while. Используя функцию сна в Java, вам не нужно делать такой цикл. Все, что вам нужно сделать, это передать SleepTime, который вы хотите спать в миллисекундах, функции сна, и он будет работать нормально.

private void waitUntil(long time) {
    try {
        Thread.sleep(time);
    } 
    catch (InterruptedException e) {
    //This is just here to handle an error without crashing
    }
}
0 голосов
/ 10 сентября 2011
...