Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как организовать игровые циклы?

    Teivaz
    @Teivaz
    Не знаю ка обстоит дело с играми на JS, но на C++ в функцию update передаётся время с прошлого апдейта, как правило, в милисекундах. Это время удобно учитывать для перемещения объекта.
    void update(float dt)
    {
    float traveled = getSpeed() * dt + getTravaledDistance();
    setTraveledDistance(traveled);
    }

    При этом функция отрисовки и функция обновления выполняются в одном потоке (иначе нужно будет синхронизировать потоки, лочить некоторые методы и т.д.).
    А если игра вдруг подвисла, то в апдейт может прийти довольно большое значение времени и тогда игровые элементы могут сделать резкий скачок. Чтобы избавиться от этого можно обрезать максимально возможное время в главном цикле:
    // main loop
    while(!done)
    {
    float dt = getTimeSinceLastUpdate();
    dt = min(33.3, dt); // equals 30 fps
    update(dt);
    render();
    }
    Ответ написан
    Комментировать