Crear un juego – Parte II (Anatomía)


La anatomía de los juegos sigue un principio básico, sin importar si es 2D o 3D, todos siguen el mismo patrón, aun que dependiendo del Engine3D o librería grafica2D (en este caso SDL).

Un videojuego es una aplicación diferente a los programas de gestión convencionales y debe trabajar en tiempo real, aunque este término puede confundir a mucha gente, cuando decimos que algo debe de funcionar a tiempo real es que debemos de obtener del sistema una respuesta en un tiempo determinado y establecido. Establecemos ciclos que no tienen por qué tener una frecuencia muy alta. Por ejemplo, uno lógico podría ser establecer un sistema de tiempo real con intervalo de un minuto, de un milisegundo o de un año. Siempre que cumpla con la restricción de tiempo establecido estaremos hablando de un sistema en tiempo real.

Durante la ejecución de la aplicación el juego estará realizando alguna tarea como la de dibujar objetos (enemigos, héroe, balas, coche, mundo, etc.), calcular posiciones y actualizando las coordenadas, detectando colisiones, etc., todo esto continuamente independientemente de si recibimos estímulo por parte del jugador (usuario) o no. Piénsalo bien, es totalmente lógico, imagínate un videojuego que sólo reaccionase cuando produjésemos alguna acción con un mando (teclado o ratón), en cuanto se nos vienen a la mente juegos complejos vemos como un mundo con vida propia envuelve a nuestro personaje, un mundo que sigue su curso pulsemos una tecla o no. Si has pensando en el clásico buscaminas, el solitario… comprenderás que la lógica que rodean a estos juegos no conllevan un trabajo adicional de la aplicación mientras que no reciban un estímulo.

Estas acciones se realizan en cada uno de los ciclos del videojuego o game loops. Un game loop es una estructura básica en forma de bucle. Este bucle se procesa varias veces por segundo en la mayoría de los casos lo que nos permite recalcular los diferentes aspectos del videojuego en un instante y que el usuario no note la secuencialidad de las acciones. Este bucle contiene la esencia del juego y la convierte en la parte más importante de la ejecución del mismo.

Así que la anotomía general de un videojuego lo podemos dividir en 3 partes principales y en la segunda parte esta dividirla en otras 3, si lo vemos menos estricto lo podemos dividir en 5 partes.

  1. Iniciación
  2. Game Loop
    1. Entrada
    2. Procesamiento
    3. Salida
  3. Finalización.

Para que se entienda mejor basta una imagen para que se entienda mejor.

Como pueden ver se empieza con la iniciación, aquí se debe inicializar todas las variables y componentes, es cuando podemos mostrar una pantalla de “cargado” y después de ahí pasar al menú.

Después de eso el GameLoop donde está la entrada, aquí capturamos los eventos que genera el usuario con algún mando (teclado, ratón, etc.), después procesamos todo eso para determinar colisiones, posiciones, frame de la animación, etc., para después darle salida, es decir, pintar todo en la pantalla. Y si terminamos el juego finalizamos (liberar memoria, cerrar clases etc.).

Para entenderlo mejor basándome en un estrato de un libro.

La inicialización es una parte fundamental del videojuego.

Es primordial que todo lo que sea necesario durante el videojuego esté inicializado desde antes que sea utilizado, como mínimo deberemos de inicializar al comienzo de la ejecución del subsistema de video que nos permita mostrar imágenes en la pantalla.

Durante el game loop utilizaremos estructuras de datos que tendremos que previamente poner en marcha, librerías que configurar y lanzar, preparar el sonido del videojuego, el sistema de captura de acciones del usuario… este es el momento de realizar todas esas tareas.

No se nos debe olvidar que tenemos que establecer las posiciones iniciales de nuestros personajes en este punto ya que si no puede que aparezcan en posiciones ilegales y comenzar la aplicación con un error que posiblemente no permita su ejecución.

Ahora el GameLoop es un bucle que se estará repitiendo durante el tiempo que dure el videojuego en ejecución. Normalmente este bucle se romperá cuando el usuario pulse una determinada tecla que provoque que el videojuego termine, o bien cuando el jugador pierda sus vidas y la partida haya terminado. Es el encargado de comandar en todo momento la tarea que se esté realizando.

Recuerdan que les dije que este se divide en 3 partes más (entrada, procesamiento y salida):

La entrada es el momento en donde en nuestro código obtenemos las acciones que ha realizado el usuario sobre los dispositivos de entrada como el teclado, el ratón, el joystick… sabremos, si se ha movido el ratón, las posiciones de origen y destino, que teclas presionó, cuales soltó, etc.

El procesamiento es el momento se reaccionará según haya sido el tipo de entrada dada por el jugador. Si recibimos algún tipo de entrada la procesaremos adecuadamente, tomando las decisiones según el tipo de acción que se haya realizado. Del mismo modo, y aunque no hayamos recibido entrada alguna, tendremos que procesar toda la lógica del videojuego, así como los comportamientos que hayamos establecido.

Y para finalizar el GameLoop estamos con la salida y es en este punto en donde refrescamos la pantalla con toda la información que ha sido procesada en los apartados anteriores.

Mostramos los gráficos por pantalla, reproducimos los sonidos… en definitiva mostramos al usuario todo el proceso y los cálculos del paso anterior. En esta parte del ciclo del juego se realizan las operaciones de salida, tanto la gráfica, como la de sonido o la de red, estas últimas sincronizadas en el apartado anterior.

Y para finalizar con este artículo del curso, entramos en la etapa de finalización y es que ya una vez terminado el videojuego debemos de liberar todos aquellos recursos que reservamos en el primer apartado o en el transcurso del juego. Las tareas a realizar en este apartado son, básicamente, las opuestas a lo que hacíamos en el proceso de inicialización. Piensa que las imágenes, sonidos, música y demás que almacena un videojuego en memoria, si no son liberados, puede perjudicar seriamente el rendimiento del mismo para otras tareas.

Bueno, eso sería todo, los veo en el siguiente articulo

Programador Mexicano con 14 años de experiencia, ha incursionado en diferentes áreas ampliando su experiencia. Aprendí programación por que quería hacer mi propio video juego aun que he tocado otras áreas como servidores, web, aplicaciones móviles, etc., pero la programación de video juegos fue más por hobby, primero con el 2D, aprendiendo usar SDL que es una herramienta que te da muchas libertades y optima, después Engine 3D como ogre o como CryEngine pero me enfoque mucho a Engine Source de valve. Me gusta compartir mi conocimiento y ayudar a la gente cuando puedo y los que me van conociendo saben que es cierto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *