20/4/15

[Tutorial] Sistema de colisiones con cajas de colisión

Buenas a todos! Por petición de @Sr_Zurdo voy a hacer un pequeño tutorial de como controlar las colisiones. Existen diferentes maneras de controlar las colisiones, yo usaré cajas de colisión que asociaremos a cada Actor del juego (el personaje principal, los enemigos, objetos a recoger del mapa, etc). Veamos como hacerlo.

Creando las cajas de colisión


A cada actor o entidad que queramos que tenga colisión le crearemos una caja de colisión. Para ello podemos usar dos clases:


Con los valores posX y posY indicamos donde queremos que se encuentre la esquina inferior izquierda de nuestro cuadrado o circulo.
Con width y height su ancho y alto respectivamente para el rectángulo.
Con radius el radio del circulo.

Puedes ver todas las funciones y otros constructores del rectángulo aquí y del círculo aquí.


Moviendo a una entidad


Una vez tenemos las cajas de colisión deberemos ir moviéndolas a la misma vez que movemos a cada entidad. Esto se hace en la función de mover el actor, que cambiará su posición una cantidad en el eje X y otra en el eje Y.

Hasta ahora tenemos varios actores con cajas de colisión que se mueven por el escenario con el movimiento que hayamos decidido (para el jugador principal puedes usar el acelerómetro o un touchpad para moverlo, por ejemplo). El siguiente paso es conseguir que los actores no avancen al chocar contra otra caja de colisión. Para ello usaremos la función overlaps, que nos indica si dos rectángulos o dos círculos se encuentran uno sobre otro.

Creamos una función en la que le pasemos la caja de colisión del actor que queremos comprobar y la caja de colisión del otro actor que queremos saber si está chocando:


Si devuelve verdadero, es que están una sobre otra, falso en caso contrario.

Esta función la tendrás que hacer para todos los actores que tenga la escena, excepto el mismo (siempre dará verdadero si haces esa función consigo mismo), decidiendo entonces si puedes moverte o no según si choca contra algún actor.

Veamos más a fondo la función de movimiento:


Para cada vez que queremos mover una entidad comprobará si se puede mover tanto en el eje X como en el eje Y. Dependiendo de si choca o no contra alguna otra entidad al intentar avanzar.

Necesitaremos tener guardado de alguna forma una lista con las entidades que tenemos en escena para comprobar si choca con alguna de ellas.


Comprobando otros elementos


No sólo puedes comparar si chocas contra otra entidad, también puedes, si usas un mapa de tiled map, crear una capa de colisión y comprobar si chocas contra algún objeto de esta capa.

También puedes comprobar si la caja de colisión se sale de la pantalla, para evitar así salirse de la escena, etc.


Notas


  • Recuerda que la función de overlaps siempre dará verdadero si comparas a un rectángulo o círculo consigo mismo.
  • Un rectángulo sólo puedes compararlo con otro rectángulo y un círculo sólo con otro círculo.
  • Aparte de mover la caja de colisión en la función de mover, luego tendrás que encargarte de dibujar en esa posición a la entidad, como siempre.

15/1/15

[Tutorial] Sistema de partículas

Buenas a todos! Después de tanto tiempo vuelvo con una nueva entrada muy interesante: Añadir partículas a nuestro juego o aplicación con ayuda de libGDX!!

Esto nos sirve por ejemplo para cuando nuestro jugador esta andando que salgan partículas de tierra, que cuando explote un objeto salgan los trozos disparados, para hacer el fuego de una hoguera, etc, etc.

Creando las partículas


Primero necesitaremos unas partículas que mostrar, decirles que imagen mostrar, velocidad, número de partículas, etc. Para ello libGDX nos proporciona un editor de partículas muy sencillo de usar:

Primero debemos abrir el editor:

  - Usuarios de Linux o MAC: Abrimos la terminal y nos situamos en la carpeta donde tenemos nuestro libGDX, desde ahí ejecutamos el siguiente comando:



 - Usuarios de Windows: Igual que antes, abrimos la terminal o MSDos y nos situamos en la carpeta donde tenemos nuestro libGDX y, desde ella ejecutamos el siguiente comando:



Si todo ha ido bien debería de abrirse el editor de partículas. En él podréis ir modificando los valores a vuestro gusto para obtener la partícula que queréis.

Lo primero a cambiar suele ser la imagen. Necesitareis una imagen de tipo jpg con fondo negro, si intentáis una imagen de otro tipo no os la abrirá, ni dará fallo ni nada.

Ya después es ir tocando valores al gusto para obtener algo como esto:

Podéis ver todas las opciones del editor y su explicación en la wiki de libGDX (en inglés) y aquí podéis ver un ejemplo de utilización del editor (también en inglés).

Una vez terminéis de editar vuestra partícula, debéis ir al menú de abajo a la izquierda y darle a "Save" para guardarla. Seleccionáis la ubicación donde queréis guardarla y su nombre y aceptáis. Enhorabuena, ya tenéis una preciosa partícula creada :D


Utilizando las partículas


Una vez tenemos nuestro archivo particula.p y, si tiene, la imagen imagen.jpg que usa la partícula, las metemos ambas dentro de la carpeta assets de nuestro proyecto android, en las carpetas que queráis.

Vamos a ver ahora que código necesitamos para ejecutar nuestra partícula. En este caso, voy a hacer un proyecto de prueba con un fondo negro en donde aparecerá la partícula cuando haga click con el ratón en cualquier posición.

Primero tenemos la clase principal:


Después tenemos la clase ParticleScreen que será la que nos muestre la partícula:


Y eso es todo, ya podemos ejecutar la aplicación y ver como al hacer click en cualquier lugar de la aplicación aparece nuestra partícula.

Aquí tenéis un enlace al ejecutable de prueba creado con las clases anteriores. Tan solo tenéis que abrirlo y hacer click en cualquier parte de la pantalla negra.


Notas

  • Recuerda hacer el dispose  del batch y del efecto que has creado.
  • En este vídeo explican como hacer una partícula de explosión sin imágenes, aunque está en inglés es muy intuitivo.
  • Recuerda que poner muchas partículas puede afectar al rendimiento de tu aplicación.