Crea tus Juegos con 8BPCursos

8BP: Cómo programar un disparo múltiple en tu juego

4.9
(9)

En nuestra entrega semanal del curso 8 Bits de Poder hablaremos de como programar un disparo multiple con ayuda de la libreria 8BP.

¿No conoces 8 Bits de Poder? entonces tienes que ir al primer articulo del curso 8BP.

¡¡¡ Comenzamos con la entrega semanal !!!

Lo primero que debes hacer es decidir el número de disparos activos que van a poder existir. Si decides que tu nave puede disparar 3 proyectiles a la vez, entonces debes reservar 3 identificadores de sprite para disparar.

A continuación, debes ajustar el retardo entre un disparo y el siguiente para evitar que dos proyectiles salgan casi pegados si se dispara muy rápido. Esto lo puedes hacer definiendo una demora mínima entre disparo y disparo. En el siguiente ejemplo he establecido una demora entre disparos de 10 ciclos de juego, para ello, al pulsar la barra espaciadora (tecla 47) se comprueba si han transcurrido al menos 10 ciclos desde el ultimo disparo. De no ser asi, no disparará.

8BP: Cómo programar un disparo múltiple en tu juego 1

Programar un disparo multiple usando COLSPALL

130 'ciclo de juego – ----
150 |AUTOALL,1:|PRINTSPALL,0,1,0
170 ' rutina movimiento personaje – ---
172 IF INKEY(47)=0 THEN IF demora<ciclo-10 THEN demora=ciclo:disp= 1+ disp MOD 3:|LOCATESP,10+disp,PEEK(27001)+8,PEEK(27003): |SETUPSP,10+disp,0,137: |SETUPSP,10+disp,15,3+dir
180 IF INKEY(27)=0 THEN dir=0:|SETUPSP,0,6,1:'ir derecha
190 IF INKEY(34)=0 THEN dir=1:|SETUPSP,0,6,-1:'ir izquierda
193 ciclo=ciclo+1
310 GOTO 150

Para elegir el sprite que se va a usar como disparo se ejecuta la instrucción:

disp = 1+ disp Mod 3

Esto va a permitir que tu disparo tome los valores 1,2,3,4 alternativamente. Si necesitas que los sprites sean el 20,21,22,23 puedes usar  disp = 20 + disp Mod 3 .Ojo porque si pones como sumando un 21 no funciona (pruebalo tu mismo). Es lo que tiene la aritmética modular.

Y Ahora vamos con las colisiones y la ventaja de utilizar COLSPALL, mucho más rápido que invocar múltiples veces a COLSP. Las únicas recomendaciones importantes son:

  • Que nuestro <sprite number> sea superior a nuestros disparos, para que |COLSPALL lo compruebe antes que a los disparos.
  • Que tengamos configurado |COLSP para solo comprobar la lista de sprites que son enemigos y son necesarios de colisionar, mediante el uso de |COLSP 32, <inicio>, <fin>

Antes de comenzar el ciclo de juego definimos nuestras variables:

collider=32:collided=32:|COLSPALL,@collider,@collided

En el ciclo de juego pondremos:

|COLSPALL:IF collider<32 THEN if collider=31 THEN GOSUB 300:goto 2000: ELSE GOSUB 770

Con esta línea ya sabemos si hay colisión, pues entonces la variable “collider” será <32. Además, si es igual a 31 entonces es nuestra nave (nos han dado) y si no, entonces seguro que uno de nuestros disparos ha alcanzado a una nave enemiga e iremos a la rutina ubicada en la línea 770, donde se encontrará algo como esto:

769' - – rutina colision disparo – ---
770 |SETUPSP, collider, 9, imgborrado:’asociamos imagen borrado al disparo
772 |PRINTSP, collider: ‘borramos el disparo
775 |SETUPSP, collider, 0, 0: 'desactivamos el disparo 
777 if collided>=duros then return:’enemigo indestructible
778 ' la secuencia 4 es una secuencia de animación de “Muerte”, una explosion
780 |SETUPSP, collided, 7, 4:|SETUPSP, collided, 0, &x101: return

En resumen, con una sola invocación a COLSPALL ya sabemos quién ha colisionado (“collider”), y con quién ha colisionado (“collided”).

En el siguiente articulo hablaremos de como controlar quien colisiona cuando hay varios solapes de sprites.

¿Cómo llevas tu juego con 8BP?

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Mostrar más

Un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Publicaciones relacionadas

Botón volver arriba