AnteriorPosterior

8. El bucle de juego (game loop)

  Curso: Introducción a los gráficos en C con SDL

8. El bucle de juego (game loop)


Si alguien quiere mostrar una imagen, ya sabe cómo hacerlo. Si quiere que el programa espera hasta que se pulse cierta tecla, también. Pero si pretende abordar un juego completo, es frecuente no tener claro cómo debería ser la estructura del juego: qué repetir y cuando.

Pues bien, en un juego típico encontraríamos:
  • Cosas que no se repiten, como la inicialización para entrar a modo gráfico, o la liberación de recursos al final del programa.
  • Cosas que no deberían repetirse, como la lectura de las imágenes que vamos a usar (si no son muy grandes, bastará con leerlas al principio y memorizarlas).
  • Cosas que sí deberán repetirse, como dibujar el fondo, comprobar si el usuario ha pulsado alguna tecla, mover los elementos de la pantalla si procede, etc.

Esta parte que se repite es lo que se suele llamar el "bucle de juego" (en inglés, "game loop"). Su apariencia exacta depende de cada juego, pero en la mayoría podríamos encontrar algo parecido a:

Inicializar
Mientras (partida en marcha)
    Comprobar sucesos (teclas / ratón / joystick)
    Dibujar fondo (en pantalla oculta)
    Actualizar posición de personajes (en pantalla oculta)
    Comprobar colisiones y otras situaciones del juego
    Corregir personajes según la situación
    Mostrar pantalla oculta
    Atender a situaciones especiales (una vida menos, etc)
Fin Mientras
Liberar recursos

El orden no tiene por qué ser exactamente éste, pero habitualmente será parecido. Vamos a detallarlo más, para comprobar que se entiende:
  • Al principio del programa, toda la inicialización, que no se repite.
  • Mientras la partida esté en marcha, una de las cosas que haremos es comprobar si hay que atender a alguna orden del usuario, que haya pulsado alguna tecla o utilizado su ratón o su joystick/gamepad para indicar alguna acción del juego.
  • Otra de las cosas que hay que hacer siempre es "componer" la imagen del juego (fondo + personajes), generalmente en pantalla oculta, para evitar parpadeos.
  • Normalmente, antes de dibujar (quizá incluso antes del paso anterior) deberemos comprobar si ha habido alguna colisión o alguna otra situación que atender. Por ejemplo, si un disparo enemigo ha chocado con nuestra nave, no deberíamos dibujar la nave, sino una explosión. O quizá nuestro protagonista recoja un objeto y cambie su apariencia.
  • Cuando ya queda claro cómo debe ser la pantalla, es cuando la dibujaremos.
  • También hay situaciones especiales que se pueden dar durante la partida, y que pueden suponer interrupciones del bucle normal de juego, como cuando el usuario pulsa la tecla de pausa, o pide ayuda, o pierde una vida.
  • Finalmente, hay que recordar que cuando acaba la partida, en casi cualquier biblioteca de funciones que usemos deberemos liberar los recursos que hemos usado (en SDL, con SDL_Quit).
Ahora queda probar a ponerlo en práctica...

Actualizado el: 06-06-2006 13:04

AnteriorPosterior