Pasar el time transcurrido a la function de actualización desde el bucle del juego

Quiero pasar el time transcurrido al método update() ya que esto facilitaría la implementación de las animaciones y los conceptos relacionados con el time.

Aquí está mi bucle de juego.

 public void gameLoop(){ boolean running = true; long gameTime = getCurrentTime(); long elapsedTime = 0; long lastUpdateTime = 0; int loops; while (running){ loops = 0; while(getCurrentTime()>gameTime && loops<Global.MAX_FRAMESKIP){ elapsedTime = getCurrentTime() - lastUpdateTime; lastUpdateTime = getCurrentTime(); update(elapsedTime); gameTime += SKIP_STEPS; loops++; } displayGame(); } } 

Método getCurrentTime ()

 public long getCurrentTime(){ return (System.nanoTime()/1000000); } 

método update ()

 long time = 0; public void update(long elapsedTime){ time += elapsedTime; if (time>=1000){ System.out.println("A second elapsed"); time -= 1000; } } 

Pero esto es imprimir el post por 3 segundos.

Gracias.

Primero, debe evitar llamar a getCurrentTime () varias veces por ciclo. Posiblemente obtendrá diferentes valores en diferentes momentos. Llámalo una vez al comienzo del ciclo y usa ese valor como la hora actual para el rest del ciclo. Además, estás avanzando gameTime en una cantidad fija cada vez en lugar de la longitud del fotogtwig, de alguna manera estás mezclando un concepto de fotogtwig de paso fijo y de longitud variable. Para tener frameworks de longitud variable, es probable que desee algo más como:

 long elapsedTime = 0; long lastUpdateTime = getCurrentTime(); long gameTime = 0; while (running){ gameTime = getCurrentTime(); elapsedTime = lastUpdateTime - gameTime; // This is where you can apply a minimum frame time if you want, at the // very least, you should make sure elapsedTime > 0, since // you don't want to run 0 length frames if (elapsedTime < Global.MIN_FRAME_LENGTH) continue; update(elapsedTime); displayGame(); lastUpdateTime = gameTime; } 

Ese bucle interno solo es necesario si desea tener un time de fotogtwig máximo , en cuyo caso podría hacer algo como:

 long gameTime = getCurrentTime(); long elapsedTime = 0; long lastUpdateTime = getCurrentTime(); long currentTime = lastUpdateTime; long frameTime = 0; while (running){ currentTime = getCurrentTime(); elapsedTime = lastUpdateTime - currentTime; if (elapsedTime < Global.MIN_FRAME_LENGTH) continue; while (elapsedTime > 0) { frameTime = elapsedTime; if (frameTime > Global.MAX_FRAME_LENGTH) frameTime = Global.MAX_FRAME_LENGTH; update(frameTime); elapsedTime -= frameTime; } displayGame(); lastUpdateTime = currentTime; } 
    Intereting Posts