Crea tus Juegos con 8BPCursos

8BP: mueve 32 sprites con lógicas masivas

4.8
(6)

Hola amigos de 8 bits de Poder, en este articulo veremos como es posible mover hasta 32 sprites con 8BP. Tal como vimos en la anterior entrega de nuestro curso de programación para amstrad CPC es posible mover un gran numero de sprites en pantalla haciendo uso de las lógicas masivas.

Ahora vamos a ver un sencillo ejemplo para mover 32 sprites simultáneamente y suavemente (a 14fps). Es perfectamente posible. Solo un fantasma va a tomar decisiones en cada ciclo, aunque se van a mover todos los fantasmas en todos los ciclos.

¿32 sprites?, Pero esto de que va exactamente?

Para programar un amstrad CPC en pleno 2020… quizás necesites algo de motivación a este respecto.

También podemos animar a todos (asociándoles una secuencia de animación y usando |PRINTSPALL,1,0 ) y seguirá quedando suave, pero aun parecerá que hay mayor movimiento pues el aleteo de las alas de una mosca (por ejemplo) genera mucha sensación de movimiento.

32-sprites-con-8bp
Gracias a las lógicas masivas es posible mover hasta 32 sprites simultáneamente.

Lo que hemos hecho ha sido reducir la complejidad computacional. Hemos partido de un problema de “orden N”, siendo N el número de sprites. Suponiendo que cada lógica de sprite requiera 3 instrucciones BASIC, en principio habría que ejecutar N x 3 instrucciones en cada ciclo. Con la técnica de “lógicas masivas”, transformamos el problema de “orden N” en un problema de “orden 1”.

Se llama problemas de “orden 1” a los que involucran un número constante de operaciones independientemente del tamaño del problema. En este caso hemos pasado de Nx3= 32×3 = 96 operaciones BASIC a sólo 3 operaciones BASIC. Esta reducción de complejidad es la clave del alto rendimiento de la técnica de lógicas masivas.

massive-logics

a continuación podemos ver un ejemplo de código. Puedes pegarlo en tu emulador y comprobar rápidamente el funcionamiento del mismo.

 
1 MODE 0
10 MEMORY 23999: CALL &6B78
20 DEFINT a-z
25 ' reset enemigos
30 FOR j=0 TO 31:|SETUPSP,j,0,&X0:NEXT
35 ' num enemigos de 12 x 16 (6bytes de ancho x 16 lineas)
36 num=32: x%=0:y%=0
40 FOR i=0 TO num-1:|SETUPSP,i,9,&8ee2: |SETUPSP,i,0,&X1111:
41 |LOCATESP,i,rnd*200,rnd*80
42 next
43 i=0
45 gosub 100
46 i=i+1: if i=num then i=0
50 |PRINTSPALL,0,0
60 |AUTOALL
70 goto 45

100 |peek,27001+i*16,@y%
110 |peek,27003+i*16,@x%
120 if y%<=0 then |SETUPSP,i,5,2:|SETUPSP,i,6,0: return
130 if y%>=190 then |SETUPSP,i,5,-2:|SETUPSP,i,6,0: return
140 if x%<=0 then |SETUPSP,i,5,0:|SETUPSP,i,6,1: return
150 if x%>=76 then |SETUPSP,i,5,0:|SETUPSP,i,6,-1: return

160 azar=rnd*3
170 if azar=0 then |SETUPSP,i,5,2: |SETUPSP,i,6,0:return
180 if azar=1 then |SETUPSP,i,5,-2:|SETUPSP,i,6,0:return
190 if azar=2 then |SETUPSP,i,5,0:|SETUPSP,i,6,1:return
200 if azar=3 then |SETUPSP,i,5,0:|SETUPSP,i,6,-1:return

En el próximo capitulo de nuestro curso veremos como funciona la ejecución alternada y periódica en cascada de la programación con lógicas masivas. ¡Hasta la próxima semana!

¿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