Pausar el juego dentro del ciclo del juego

12

Dentro del ciclo del juego, el juego se detiene presionando P, lo que significa que el ciclo del juego ya no se ejecuta. El problema es que después de detener este bucle, no se puede presionar P nuevamente para reanudar el bucle, ya que estaba dentro del bucle. ¿Cómo hacer que cuando se vuelva a presionar P haga que el bucle vuelva a funcionar?

GSquadron
fuente

Respuestas:

20

En realidad, no detengas el ciclo del juego cuando pausas el juego. En cambio, debe agregar la variable bool, que se cambia a verdadero / falso dependiendo de si el juego está en pausa. Si el juego está en pausa, solo tiene que dejar de actualizar el juego, pero aún puede seguir renderizando el marco actual, incluso recibiendo actualizaciones de la entrada.

if(gameIsPaused == false)
{
    // run updates
}
checkInput();
render();
Katu
fuente
Es posible que desee tener una checkInputfunción diferente para el modo en pausa y el modo sin pausa, porque puede haber algunos controles que solo están disponibles en un modo u otro. La checkInputfunción para el modo en pausa podría no hacer nada más que mirar si Pse presiona y luego se configura gameIsPaused = false, pero algunos juegos también colocan funcionalidades adicionales en la pantalla de pausa (en los años 90 era popular tener la pantalla de pausa como entrada oculta para códigos de trucos, moderna juegos como combinarlo con una pantalla de menú).
Philipp
1
Si bien generalmente estoy de acuerdo con su respuesta, creo que debería establecerse explícitamente que a veces es perfectamente válido ejecutar algunas actualizaciones dentro del estado de pausa. Por ejemplo, animando elementos de menú o quizás algo de gestión de audio. La gran idea es que la condición de pausa le permite bifurcarse en otro conjunto de checkInput/ render/ updatellamadas.
Nicholas Miller
Lo único que debería cambiar la pausa en el juego es que se debe omitir el bit "actualizar mundo". Todas las demás funcionalidades probablemente deberían mantenerse normales.
Mooing Duck el
44
Traté de mantener la respuesta lo más simple posible, porque esto es algo muy básico en la programación de juegos y no quería confundir al interrogador.
Katu
1
@ user3730788: Una rama que se ejecuta una vez por ciclo de juego (es decir, menos de 100 veces por segundo) no tendrá un impacto perceptible en el rendimiento, ni siquiera si se predice mal cada vez .
Ilmari Karonen
1

Asegúrese de que presionar P cambie a otro bucle que maneja el estado del juego "En pausa" y permita volver al bucle original del juego presionando P nuevamente.

En realidad, puede poner todo esto en el bucle del juego e introducir una variable de estado, si lo desea, y en lugar de desactivar el bucle, la variable de estado alterna entre la ejecución del respectivo código específico de estado dentro del bucle.

Haf
fuente