Domanda

Capisco perché lo fa questo, ma io in realtà non hanno alcuna idea di come prevenire questo. Quindi lo scenario è, ogni fotogramma che spostare la macchina da un certo di pixel predefiniti. Quello che succede è quando vado sul computer lento o più veloce ... beh ho più o meno fotogrammi al secondo in modo che la macchina si muove sia più lento o più veloce. Mi chiedevo come avrei potuto impedirlo.

Ho il sospetto che avrei avuto lo stesso problema con qualsiasi libreria ... Questa è la mia prima volta a fare cose in tempo reale del genere.

È stato utile?

Soluzione

Ho il sospetto che il codice corrente sembra un po 'come questo

 // to be called every frame
 void OnEveryFrame()
 {
     MoveCar();
     DrawCarToScreen();
 }

Ma dovrebbe essere simile a questo:

 // to be called - for example - 50 times per second:
 void OnEveryTimerEvent()
 {
     MoveCar();
 }

 // to be called every frame
 void OnEveryFrame()
 {
     LockTimerEvents();
     DrawCarToScreen();
     UnlockAndProcessOutstandingTimerEvents();
 }

È necessario impostare un evento timer in base, ovviamente.

Altri suggerimenti

Sposta vettura secondo i timer e non framerate. vale a dire il modello dell'automobile dovrebbe essere indipendente dalla rappresentazione di visualizzazione.

È possibile risolvere questo problema utilizzando i timer precise e matematica vettoriale.

Quindi, per amor di discussione lascia suggerire il vostro codice di disegno potrebbe essere chiamato in qualsiasi punto nel tempo, ad esempio, 1 secondo a parte oppure 3 secondo di distanza o 0,02 secondi di distanza.

Prendere la velocità di movimento macchina per essere 40 pixel al secondo.

Quindi, il numero di pixel dovrebbe muoversi è. (TIME_NOW - LAST_FRAME_TIME) * 40 px

Il movimento deve essere vincolato da un "vero" tempo di ritardo, vale a dire la vostra auto si muoverà alla velocità di x pixel per intervallo di tempo.

Leggi l'orologio in tempo reale, e spostare l'auto una distanza appropriata per il tempo trascorso. Questo può sembrare un po ' "a scatti", se il computer è troppo lento, ma rende la velocità della vettura indipendente dalla velocità della CPU.

È necessario per ricoprire il framerate a X fotogrammi al secondo (60 FPS è il più comune). Questa è una caratteristica comune nella maggior parte dei quadri multimediali, tra cui SFML. Per SFML Mi piacerebbe guardare nel metodo / RenderWindow Finestra SetFramerateLimit (unsigned int limite) .

È necessario correggere il passo temporale . In sostanza, ogni fotogramma si sposta la macchina una distanza che varia in base quanto tempo è trascorso da quando in realtà l'ultima chiamata aggiornamento. In questo modo, si ottiene la velocità corretta indipendentemente dal framerate.

Devi salvare il tempo prima auto e disegni in movimento.
Salvare il tempo dopo tutti i calcoli.
Spostare l'auto da Npixels / secondo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top