Codificar un juego tipo Space Invaders para Android: Parte 9

Detección de impactos

Hay cinco tipos distintos de impactos que necesitamos detectar y responerles. Los manejaremos a cada uno individualmente pero cada bloque de códigos pueden ingresarse directo al método update en los lugares que indiquen los comentarios.

Aquí revisamos si la bala del jugador ha tocado la parte de arriba de la pantalla. Si sí, entonces llamamos a setInactive para hacerla invisible y disponible para dispararse otra vez. El código llega entónces a un circuito cerrado repetitivo (loop) para todas las balas en invadersBullets haciendo exactamente lo mismo. Ingresa el código que acabamos de tratar en el método update en el lugar que se indica en los comentarios.

En el siguiente código revisamos si las balas están activas y si sí, circuiteamos por cada uno de los invaders. Por cada invader que está invisible usamos RectF.intersects para revisar si hay impactos con la bala del jugador. Cuando se detecta un impacto entonces el invader se hace invisible, y reproducimos un sonido de explosión, establecemos la bala a inactivo y agregamos diez a score.

Ingresa el código que acabamos de tratar en el método update en el lugar indicado en los comentarios.

Ahora circuiteamos a través de cada bala alienígena en la formación de invadersBullets. Revisamos si está activa, y si sí, entonces circuiteamos a través de todos y cada uno de los ladrillos en el formación de bricks y por cada ladrillo visible llamamos RectF.intersects para detectar si han sido impactados. si han sido impactados, entonces la bala se establece a inactivo, el ladrillo a invisible y un efecto de sonido indicaría que la guarida se ha dañado. Fijate que cada bala activa es revisada contra cada uno de los ladrillos visibles. Esto es una cantidad importante de revisiones. Después veremos formas para mejorar esto en nuestro proximo projecto.

Ingresa el código que acabamos de ver en el método update en el lugar indicado por los comentarios.

Aquí hacemos los mismo que como lo hicimos en el bloque de códigos previo, excepto que solo revisamos cada ladrillo contra las balas del jugador. Esto esta muy bien para disparar por una abertura en las guaridas.
Ingresa el código que acabamos de tratar en el método update en el lugar indicado por los comentarios.

Ahora, el último bloque de códigos en todo el proyecto de Space Invaders. Este código circuitea por todas las balas en la formación invadersBullets y revisa para ver si ha impactado al jugador. Si sí, entonces una vida se reduce, se reproduce un sonido y la bala se hace inactiva. Finalmente, una revisión se hace en caso de que el jugador haya perdido todas sus vidas lives y en este caso, el juego empieza de nuevo con una llamada a prepareLevel.

Ingresa el código que acabamos de tratar en el método update en el lugar indicado por los comentarios.

Felicidades, hemos terminado.

El juego de Space Invaders terminado y corriendo en un celular Android
El juego de Space Invaders terminado y corriendo en un celular Android

Últimas palabras sobre Space Invaders

El siguiente proyecto tendrá un mundo con desplazamiento. Quiere decir que toda el área de juego no será mostrada en la pantalla al mismo tiempo. Esto introducirá el concepto de una ventana viewport el cual define que es lo que el jugador puede ver en cualquier cuadro de juego. También podemos usar la ventana para recortar clip objetos que no necesiten actualizarse o revisión de impacto, lo cual hace que nuestro código sea más rápido. “Echa un vistazo al projecto de Android 2D de disparos en desplazamiento”.

También hay un projecto que pudiera interesarte, introducir una “clase para manejar animaciones internas” para que podamos tener multiples objetos y cada uno haciendo animaciones chidas; como el aleteo de los brazos en Space Invaders pero con un ilimitado y dinámico número de cuadros.

Por favor deja tus comentarios. Muchas gracias y suerte codificando.