Motor de juego
Categorías: Java | Juegos | Programación |
Contents
1. Contexto
Un motor de juego es una API, un paquete de clases, que facilita la creación de juegos. En este artículo abordaremos la creación de un motor de juegos paso a paso. Estos pasos son el resultado de los programas de prueba que hemos hecho para aprender a hacer un motor de juegos.
El motor está basado en dos fuentes bibliográficas: La primera en el libro Java al descubierto publicado por Prentice Hall, es un libro que tiene un capítulo de juegos Juegos, Multimedia y VRML; en este básicamente lo que se hace es desarrollar un motor muy básico. La segunda referencia es Killer Game Programming in Java de Andrew Davison publicado por O'Reilly y se puede bajar en http://fivedots.coe.psu.ac.th/~ad/jg/; como dice el título es un libro sólo dedicado el desarrollo de juegos con Java y su parte central es el desarrollo de un motor de juegos; incluye también el desarrollo de juegos 3D y en red.
2. Pre-requisitos
Para abordar la lectura de este escrito es necesario saber Java y particularmente AWT (hemos publicado una serie de ejemplos en Java).
3. Primer motor
La primera versión no tiene grandes pretensiones está pensado más bien para introducir los conceptos básicos con un mínimo de de distracción. Se compone de dos clases: ObjetoMovil y MotorJuegos. El primero es un clase abstracta que modela cualquier objeto que se mueve en el juego (y hasta los que no se mueven). La segunda MotorJuegos se encarga de mantener la lista de objetos móviles y los dibuja. Los programas son:
3.1. Cómo usar el motor
Para ver cómo usar este versión de motor vamos a escribir un programa llamado PruebaMotorDeJuegos1,java. En él tendremos dos objetos móviles un circulo rojo que se podrá mover con las flechas del cursor y un cuadrado verde que no hará nada, pero sirve para ver como funciona con varios objetos y además, como el cuadrado se agrega de último al motor el circulo puede pasar por debajo él.
3.2. Depredador I
Ahora un programa más interesante. Convertiremos a nuestro cuadrado en un depredador que va a intentar atrapar su presa, el círculo, por esta razón en esta versión cambiamos los colores: el depredador rojo y la presa verde. El depredador se implementa como un thread para que tenga vida propia.
4. Segundo motor
Mientras que en le primer motor la animación se hacía forzando un repaint, en este el motor es un hilo que controla toda la animación desde el método run. De esta forma la animación queda bajo control del motor y no de la cola de eventos del java. Y tiene el efecto de que desaparecen los repaint que había que colocar en los objetos móviles. El método run es principalmente un ciclo controlado por la variable booleana jugar, de tal forma que al invocar el método finalizar este ciclo termina y por lo tanto el juego. Por ello, y por lo que es un hilo, el motor de juegos tiene un nuevo método iniciar que crea el hilo.
El nuevo código del motor es:
4.1. El objeto móvil
Al objeto móvil se le colocó una atributo visible que cuando es verdadero se hace el dibujo y cuando es falso no, de esta forma podemos hacer aparecer y desaparecer objetos del juego. Por ejemplo, cuando la presa es atrapada por el depredador. El código es:
4.2. Depredador II
El juego del del depredador de adaptó a esta nueva versión del motor. Ahora cuando el depredador captura la presa esta desaparece (dejo al lector la interpretación) y el juego termina. Además este versión del depredador es un paquete, esto para para poder repetir clases con el mismo nombre. Por ello, debe crear un directorio que se llame depredador2 y poner hay el código. Este directorio debe ser hermano del directorio del motor de juegos. El código es:
4.3. Muchos objetos
Ahora vamos a hacer un programa en el que se muevan aleatoriamente cien objetos, esto con el objetivo de ver como se comporta el motor con muchos objeto móviles. El código es:
Si corrió el ejemplo notará que la animación parpadea mucho. Esto es porque dibujar muchos objetos es un proceso relativamente lento, en especial ovalos. Mejoraremos esto en la siguiente versión del motor con una técnica que se llama doble buffer.
5. Tercer motor
En esta versión del motor eliminaremos el parpadeo de la animación, para ello utilizaremos la técnica del doble buffer. Tendremos una segunda área donde dibujaremos sin que se vea, este es el doble buffer y cuando esté completa pasaremos todos los pixels al buffer de dibujo principal, que es mucho más rápido que dibujar ovalos. El nuevo código del motor es:
5.1. Muchos objetos
Ahora es solo cambiar el import para que el código de los muchos objetos trabaje con la versión en doble buffer, de todos modos he aquí el código completo:
Como puede ver es mucho más suave la animación y eso que son cien objetos.
5.2. Depredador III
Ahora la versión con doble buffer del Depredador.
6. Que falta
- Desarrollar las otras versiones del motor.
