Pregunta

He hecho una serie de preguntas sobre el desarrollo de J2ME Game, y en una reciente, Neil Coffey comentó

  

Como un problema secundario, ¿REALMENTE quieres   hacer 100 ticks / segundo en un juego J2ME?   Como creo que SB ha mencionado, usted   realmente también debería dormir hasta la próxima   punto de despertador deseado, no un punto fijo   duración cada vez.

Por alguna razón, esa cosa quedó en mi mente y ahora quiero las respuestas, ¿qué necesito para hacer que mi gameloop duerma hasta el punto de despertador deseado , realmente no lo sé ¿Dónde está ese punto xD (teóricamente hablando).

En aras de los comentarios, esta es una versión simplificada de mi gameloop:

public void run() {
    Graphics g = this.getGraphics();
    while (running) {
        long diff = System.currentTimeMillis() - lastLoop;
        lastLoop = System.currentTimeMillis();
        input();
        this.level.doLogic();
        render(g, diff);
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            stop(e);
        }
    }
}

¡Gracias por tu ayuda!

¿Fue útil?

Solución

Si decides que quieres renderizar cada 10 milisegundos, entonces:

loop {
  - record current time; render
  - do input/logic
  - check the current time, and calculate elapsed time
    - if less than 10 ms has elapsed, calculate the remaining time (10 millis - elapsed time); sleep for this duration
}

Entiendo que puede haber problemas con la resolución del temporizador (por ejemplo, Thread.sleep (10) puede no dormir exactamente 10 ms; y System.currentTimeMillis () puede no devolver resultados con granularidad de hasta 1 ms). Esto depende de la plataforma.

Otros consejos

Hay un excelente artículo sobre bucles de juego aquí , si no lo ha leído ya.

Desde mi experiencia escribiendo juegos J2ME, querrás minimizar cuánto haces en un bucle de juego, ya que un bucle de juego mal escrito puede agotar rápidamente la batería de un teléfono. Es decir, si está procesando cada 10 milisegundos, asegúrese de verificar si algo ha cambiado, y si no, omítalo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top