Skip to content

Proyecto con libGDX: creación del primer videojuego

Programación de Videojuegos con libGDX
1. Framewok libGDX para programación de videojuegos
2. Framework libGDX para programación de videojuegos (II)
3. Proyecto con libGDX: creación del primer videojuego
4. Videotutorial: primer videojuego con libGDX

Vamos a desarrollar un proyecto con el framework libGDX, en el que crearemos un sencillo videojuego 2D, para familiarizarnos con esta librería y las posibilidades que nos ofrece.

El juego consistirá en controlar una nave espacial con la pantalla táctil del dispositivo.  El usuario deberá evitar colisionar con las naves enemigas, y conseguir chocar con los objetos de puntuación para aumentar su casillero de puntos. Al final del tutorial puedes descargar todo el código del proyecto.

Actualización: abajo de este contenido tenéis unas indicaciones que habréis de tener en cuenta para realizar el proyecto con Android Studio en vez de Eclipse, y la descarga del proyecto en ambas versiones.

Elementos necesarios:

  • Recursos de imágenes para la nave del jugador, la nave enemiga y objeto de puntuación.
  • Se deben declarar e inicializar los recursos anteriormente nombrados con la clase Texture.
  • Se deben declarar e inicializar tres objetos de tipo Rectangle, uno por cada elemento en pantalla.
  • Será necesario declarar e inicializar un objeto de la clase SpriteBatch, para asignar los objetos Texture (imágenes) a los objetos Rectangle definidos (al asignarlos se asocia tanto el tamaño como la posición en pantalla). Recordemos que es necesario trabajar con los objetos Rectangle, aunque lo que visualicemos sean imágenes o texturas.
  • Recursos sonoros para la ambientación de las colisiones entre los elementos.

En la siguiente imagen se pueden observar los diferentes elementos que intervienen en el videojuego:
Elementos del videojuego

Como se puede apreciar en la imagen, las coordenadas de los ejes X e Y serán siempre de valor positivo. Para los objetos de puntuación jugador y nave enemiga, al posicionarse en un valor negativo del eje X, aparecerán de nuevo al comienzo de la pantalla por la parte derecha.

Reglas del juego:

  • Por cada colisión con el objeto de puntuación del jugador, se sumarán dos puntos a su casillero correspondiente.
  • Por cada colisión con la nave enemiga, se restará una vida en el contador de vidas restantes.
  • Por cada 10 puntos, se aumentará en uno el número de vidas restantes, se aumentará el nivel en uno, y también aumentará la velocidad de la nave enemiga y del objeto para puntuación.
  • En caso de superar los cinco niveles definidos en el videojuego, la puntuación final se sumará al número de vidas restantes (por cada vida se adjudican 10 puntos).
  • En el supuesto de perder todas las vidas, se mostrará sólo la puntuación final obtenida.

Funcionamiento:

El control de la nave del jugador se realizará a través de la pantalla táctil del dispositivo, que en caso de pulsarla, la nave comenzará a subir (coordenada eje +Y), y al dejar de presionar la pantalla la nave descenderá (la nave del jugador no podrá sobrepasar los límites superior e inferior de la pantalla).
Logica control videojuego

Proyecto JuegoslibGDX:

JuegoslibGDX/src/com.academiaandroid.libgdx/MiJuegoGDX.java

Se declaran e inicializan las variables que representarán, tanto los elementos visuales del videojuego, como los parámetros de velocidad de movimiento de los diferentes objetos en pantalla, además de la música para la ambientación del juego , la puntuación inicial, vidas del jugador y nivel de inicio del juego:

Se inicializan los objetos Rectangle en el método create() , que nos permitirán controlar las colisiones entre los objetos que intervienen en el videojuego. Se asigna el mismo ancho y alto que las imágenes o texturas que van a representarse en esa posición. Se establece los rectángulos en coordenadas y aleatorias. También se preparan los sonidos para su reproducción, en modo bucle con el método setLooping:

 

Implementaremos un método llamado controlColisionesYPuntuacion(), que permitirá establecer la lógica de puntuaciones y niveles, dependiendo de con que objeto colisionemos:

También será necesario crear un método que controle cuando la nave enemiga o el objeto puntuación desaparezcan por el lado izquierdo de la pantalla (eje de coordenadas -X). A continuación se muestra, como ejemplo de ambos, la creación de un nuevo enemigo:

Para finalizar, se declara un método encargado de controlar cuando el usuario pulsa la pantalla y cuando deja de hacerlo. Es conveniente aclarar, que se debe controlar las posiciones máxima y mínima de la nave del jugador en el eje de coordenadas Y, para que esta siempre sea visible:

Descarga del Proyecto (versión para Eclipse)

Download

Versión para Android Studio

Os indicamos los cambios que debéis tener en cuenta en el proyecto para realizarlo con Android Studio. Como veréis son pequeños, y en cualquier caso, disponéis abajo del código del proyecto en versión Android Studio para descargarlo.

En este proyecto debeis considerar lo siguiente:

1) Uso de la clase GL20 en lugar de GL10

Simplemente cambiamos la sentencia de importación:

susttuye a:

 

2) Las instancias de BitmapFont, al invocar al método setScale(), han sido sustituidas por la estructura getData().setScale():

Por ejemplo:

es sustituido por

 

es sustituído por

(depende del tamaño de la pantalla, sería más eficiente obtenerlo, pero dejamos esta versión para no introducir más cambios).

Descarga del Proyecto (versión para Android Studio)

Download

Esta entrada tiene 2 comentarios

  1. Buenas, muchas gracias por los tutoriales pero podríais subir unos tutoriales sobre la cámara isometrica ?

    Muchas gracias por todo

    1. Hola Pablo, estamos diseñando una nueva serie de tutoriales sobre libGDX que profundizarán en el uso de esta librería a través del desarrollo de un videojuego completo. Cuando tengamos definidos esos contenidos en detalle con el autor te podremos decir si se trata el tema de la cámara isométrica.
      Gracias por tu interés

Los comentarios están cerrados.

Volver arriba
Esta web usa cookies para su correcto funcionamiento. No hay cookies de publicidad, aunque algunos de los contenidos mostrados (videos o documentos insertados) están alojados en servicios externos (Youtube, Vimeo, Box...) que sí pueden implementar sus propias cookies.    Más información
Privacidad