Deo zbornika Teorija razvoja igara

Fiksni vremenski korak

Fiksni vremenski korak (fixed timestep) je tehnika koja se koristi za ažuriranje fizike u igrama.

Potrebno je da se fizika u igrama ažurira tek kada prođe određeno realno vreme. Delta vreme, koje koristimo za animacije, zavisno je od brzine ekrana i netačno za fiziku. Stoga koristimo fiksni vremenski razmak (npr. 0.016 sekundi) za stabilno izvršenje fizike, ali to zahteva interpolaciju za glatke animacije.

Primer

const fps = 60
const dt = 1 / fps                        // fiksni vremenski korak
let accumulator = 0
let frameStart = getCurrentTime()

mainLoop() {
  const currentTime = getCurrentTime()
  accumulator += currentTime - frameStart // dodaje vreme proteklo od prošlog kadra
  frameStart = currentTime                // čuva početak ovog kadra

  while(accumulator > dt) {               // ako je proteklo više od fiksnog koraka
    updatePhysics(dt)
    accumulator -= dt
    renderGame()      
  }
}

Međutim, šta ako ažuriranje fizike traje predugo i akumulator sve više raste u svakoj petlji? Ovo se zove spirala smrti. Da bi se rešilo, treba ređe ažurirati fiziku ako akumulator postane previsok. Jednostavan način je zakucati akumulator ispod neke proizvoljne vrednosti.

Pre while petlje dodajemo ovaj red, da bismo izbegli spiralu smrti:

if (accumulator > 0.2) accumulator = 0.2