Как реализовать игровой цикл в реактив-банане?

Этот вопрос характерен для имитации реактивного банана и моделирования в реальном времени с физическим и визуальным компонентом (например, игры).

В соответствии сИсправьте свой временной шаг! идеальный способ настроить игровой цикл (при условии, что физика должна быть воспроизводимой), вам нужен фиксированный временной интервал между кадрами. Рассмотрев ряд реальных сложностей, автор приходит к этому игровому циклу:

double t = 0.0;
const double dt = 0.01;

double currentTime = hires_time_in_seconds();
double accumulator = 0.0;

State previous;
State current;

while ( !quit )
{
     double newTime = time();
     double frameTime = newTime - currentTime;
     if ( frameTime > 0.25 )
          frameTime = 0.25;   // note: max frame time to avoid spiral of death
     currentTime = newTime;

     accumulator += frameTime;

     while ( accumulator >= dt )
     {
          previousState = currentState;
          integrate( currentState, t, dt );
          t += dt;
          accumulator -= dt;
     }

     const double alpha = accumulator / dt;

     State state = currentState*alpha + previousState * ( 1.0 - alpha );

     render( state );
}

Сводка заключается в том, что физическое моделирование всегда подается с одинаковым приращением времени (dt) для численной устойчивости. Для этого необходимо учитывать, что физика и визуальные эффекты могут обновляться на разных частотах, и вы не хотите слишком сильно отставать.

Например, вам могут потребоваться обновления с частотой 20 Гц, но визуальное обновление с частотой кадров 60 Гц. Этот цикл выполняет линейную интерполяцию физики, чтобы компенсировать физические обновления и графические обновления.

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

В этом обсуждении часть, которую я больше всего интересую, - это организация вызова физического движка (вызовintegrate) всегда наступаетdt, Есть лиreactive-banana позволить пользователю написать этот цикл стиля? Если так, то как? Возможно, пример, выполняющий физическое моделирование в реальном времени, в порядке (или уже существует)?

Ответы на вопрос(1)

Ваш ответ на вопрос