Programación de juegos y 3D en Java con jMonkeyEngine

Publicado por pico.dev el , actualizado el .
java programacion blog-stack planeta-codigo planeta-linux
Comentarios

jMonkeyEngine
Java

Erróneamente se sigue pensado que Java es un lenguaje lento en ejecución, en las primeras versiones era cierto pero hoy la realidad es que con las mejoras introducidas en cada versión de Java y la máquina virtual el rendimiento actual es comparable a C y C++. En la programación de juegos y 3D gran parte del proceso de representación gráfica se ha descargado de la CPU a las cada vez más potentes tarjetas gráficas, la potencia de estas GPU son las que determinan la capacidad de proceso gráfico y la calidad gráfica de los juegos.

Java no suele ser considerado como opción para programar videojuegos triple AAA pero ahí está Minecraft uno de los juegos más populares y un ejemplo de que un juego de buena calidad y rendimiento también se puede hacer en Java. Hay algunos otros ejemplos notables como de variados estilos RPG, Puzzle, MOBA, Rogue, RTS, Card MMOG, FPS, Arcade, Platform ,…:

Este es un vídeo del juego PirateHell que tiene una pinta muy buena:

Algunas capturas de imagen de estos juegos, en los enlaces anteriores se pueden encontrar vídeos de algunos de ellos.

Todos estos juegos están programados utilizando el lenguaje de programación Java y la librería jMonkeyEngine que facilita las tareas de programación de videojuegos proporcionando programación gráfica en 3D usando OpenGL, manejo de eventos de entrada como teclado o ratón, manejo de sonido, pantallas de menús o red. Usando jMonkeyEngine se pueden hacer cosas muy interesantes como se ve en los ejemplos. En el siguiente enlace se pueden encontrar el código fuente de varios ejemplos que podemos probar.

A continuación mostraré el código y unas capturas de pantalla de algunas las posibilidades de jMonkeyEngine. Primeramente veamos como crear un ejemplo básico con un cubo aplicándole una textura con el que veremos como crear una escena. El segundo ejemplo aplica texturas de diferentes formas que varían la visualización de un elemento geométrico.

Se pueden crear objetos con texturas transparentes, efectos de luz, ray casting, sistemas de partículas con las que simular fuego, chispas, polvo, establecer animaciones a objetos como cuando un personaje está descansando, terrenos, paisajes, aplicar efectos simulando la física del mundo real, sonido ambiental y posicional y más cosas. En las siguientes imágenes se pueden ver algunos ejemplos de las anteriores posibilidades (la tasa de fps normal es de 60, al tomar las capturas baja).

Un videojuego se compone de múltiples recursos como imágenes, modelos 3D, música, sprites, texturas, fuentes de texto, sonidos, iconos… en la página Open Game Art podemos encontrar todo este tipo de material sin necesidad de tener que crearlo desde la nada.

jMonkeyEngine ofrece un entorno de desarrollo (IDE) basado NetBeans. Descargando el paquete de jMonkeyEngine y copiando las librerías .jar los programas se puede ejecutar perfectamente independientemente del IDE y desarrollar con eclipse y usar la herramienta de construcción gradle.

Para instalar jMonkeyEngine debemos descargar el SDK adecuado para la plataforma que usemos ya sea Windows, Linux o Macintosh. En el caso de Linux es un archivo .sh que deberemos ejecutar (dando permisos de ejecución si es necesario), seguimos las instrucciones y seleccionamos el directorio de instalación del SDK. En jmonkeyplatform/libs de la carpeta de instalación encontramos los archivos .jar que deberemos usar en el IDE o en los programas de los ejemplos.

El libro jMonkeyEngine 3.0 Beginners Guide me ha resultado muy interesante como punto de introducción a la programación gráfica 3D con Java, pero también si realmente nos interesa la programación de videojuegos es muy recomendable leer el material ofrecido en el Curso de Experto en Desarrollo de Videojuegos, un libro de una extensión de más de 1100 páginas de muy buena calidad, en español y descargables gratuitamente. En la wiki de jMonkeyEngine se pueden encontrar numerosos tutoriales para principiantes, también numerosos artículos de nivel más avanzado y el javadoc de la API.

Otras librerías como Slick2D permiten hacer videojuegos en 2D como serían los juegos de plataformas, más o menos lo que permite jMonkeyEngine en el 3D aplicado a 2D también usando como lenguaje Java. Sin duda los videojuegos han sido el motivo en parte de que muchos hoy seamos programadores e informáticos aunque en nuestro trabajo nos dediquemos a otro tipo de aplicaciones y entornos.

Que, ¿aún crees que en Java no se pueden hacer juegos que no tienen que envidiar a muchos otros?

Yo apoyo al software libre