Asteroids: colisiones de disparos con asteroides (paso I) #Programación retro del Commodore 64

Recordemos qué es lo que hacíamos para gestionar las colisiones entre nave y asteroides:

  • En primer lugar, había que detectar las colisiones. Esto lo hacíamos con la nueva rutina "actualizaColisionesJugador". En caso de colisión, poníamos el estado del jugador a "explotando" (jugadorActivo = $00).
  • Si el jugador estaba explotando (jugadorActivo = $00), había que animar una explosión con el sprite de la nave. Esto lo hacíamos con la nueva rutina "animaExplosionJugador".

Pues bien, ahora la situación no cambia mucho. Habrá que implementar y llamar a una nueva rutina "actualizaColisionesAsteroides" y, en caso de colisión, habrá que animar una explosión con el sprite del asteroide afectado.

Pero, para empezar, hay una diferencia importante: la nave y los asteroides son sprites, pero los disparos son caracteres personalizados. Por tanto, no podemos usar el registro SPSPCL = $d01e para detectar estas colisiones. Tenemos que usar el registro que permite detectar colisiones entre sprites y texto, es decir, SPBGCL = $d01f.

Por tanto, la nueva rutina "actualizaColisionesAsteroides", que tiene que llamarse desde "actualizaAsteroides", podría ser algo así:

Asteroids - Actualiza colisiones asteroides

Es decir:

  • Leemos el registro SPBGCL.
  • Hacemos un AND del valor leído con la máscara %11111110, de modo que no tenemos en cuenta las posibles colisiones de la nave (sprite 0) con texto.
  • En caso de que algún asteroide (sprites 1 – 7) haya colisionado con texto, incrementa en 10 los puntos del jugador. Por cierto, esta variable del jugador es nueva ("jugadorPuntos"), y además ahora la pintamos en pantalla (ver nueva versión de la rutina "actualizaPantalla").

Y de momento poco más. Tendríamos que cambiar el estado del asteroide afectado para hacer la animación de la explosión, pero, con la solución adoptada de momento ("and #%11111110"), no podemos saber exactamente de qué asteroide se trata.

Así que vamos a meditar los siguientes pasos un poco mejor…

Podéis divertiros disparando a asteroides (que todavía no explotan) y ganando puntos con la versión 14 del proyecto.


Código del proyecto: Asteroids14


Editar

Josepzin

No hay comentarios:

Publicar un comentario