Salve a tutti,
in giro ci sono molte discussione riguardanti i game loop.
io uso questo tipo di game loop
public void run() {
final int UPS=60; //UPS: update per second, in questo caso 60 update al secondo
double delta=0d; //tiene il conto di quanto tempo (in secondi) manca per il prossimo update
long previousTime=System.nanoTimer();
running=true;
while(running) {
long now=System.nanoTime();
delta+=(now-previousTime)/1000000000d;
//now-previousTime è il tempo in nanosecondi
//trascorso dopo ogni iterazione;
// dividiamo per 1000000000 per convertire in secondi
previousTimer=now;
while(delta>=1d/UPS) { //delta è almeno un 60-esimo di secondo
update(delta) //update() si occupa di aggiornare la logica del gioco
delta=-1d/UPS;
}
render() disegna gli elementi su schermo
try {
Thread.sleep(1); //QUI CERCO UNA SOLUZIONE !!!!!!!!!!
}
catch(InterruptedException e) {}
}
}
Il tutto funziona bene.
Il problema sta nel Thread.sleep(1);
Se non lo metto l'uso della cpu aumenta in modo sconsiderato e questo vuol dire maggiore dissipazione di calore, maggior consumo di batteria (su notebook), ecc.
Se lo metto ho il dubbio che il thread rimanga in sleeping per più di un millisecondo (dipende dall'OS)
Inoltre su cpu più datate e meno performanti ho paura che si venga a determinare un calo di frame.
Mi servirebbe un modo per calcolare il tempo da inserire nello sleep, cosa mi consigliereste?