Jak wdrożyć pętlę gry w reaktywnym bananie?

To pytanie jest specyficzne dla symulacji reaktywnych bananów i w czasie rzeczywistym z fizycznym i wizualnym składnikiem (np. Gry).

WedługNapraw swój czas! idealny sposób na ustawienie pętli gry (zakładając, że fizyka musi być powtarzalna), potrzebny jest ustalony czas między klatkami. Po rozważeniu wielu prawdziwych komplikacji, autor przybywa do tej pętli gry:

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 );
}

Streszczenie jest takie, że symulacja fizyki jest zawsze podawana z takim samym przyrostem czasu (dt) dla stabilności numerycznej. Organizując to, należy wziąć pod uwagę, że fizyka i wizualizacje mogą się aktualizować na różnych częstotliwościach, a ty nie chcesz zbyt daleko w tyle.

Na przykład, możesz chcieć aktualizacje z częstotliwością 20 Hz, ale aktualizacja wizualna z szybkością 60 klatek na sekundę. Ta pętla wykonuje liniową interpolację fizyki, aby uzupełnić różnicę między aktualizacjami fizyki a aktualizacjami graficznymi.

Dodatkowo, gdy różnica czasu między klatkami jest znacznie większa niżdt istnieje pętla do obsługi aktualizacji w kawałkachdt. Uwaga na temat spirali śmierci odnosi się tylko do przypadku, gdy obliczenia fizyki po prostu nie nadążają za pożądaną częstotliwością aktualizacji, więc pozwala się pominąć niektóre aktualizacje.

W tej dyskusji najbardziej interesuje mnie zorganizowanie połączenia z silnikiem fizyki (wywołanieintegrate) jest zawsze krok po krokudt. Robireaktywny banan pozwolić użytkownikowi napisać tę pętlę stylu? Jeśli tak to jak? Być może przykład wykonania symulacji fizyki w czasie rzeczywistym jest w porządku (lub już istnieje)?

questionAnswers(1)

yourAnswerToTheQuestion