Crea tus Juegos con 8BPCursos

8BP: Trayectorias complejas con ROUTEALL

4.2
(5)

Hola amigos de 8 Bits de Poder. En nuestra entrega de hoy del curso veremos cómo funciona el comando ROUTEALL y las trayectorias complejas en nuestro Amstrad CPC. ¡Vamos a ello!

Trayectorias complejas

Este es un comando “avanzado” disponible desde la versión V25 de la librería 8BP. Simplifica muchísimo la programación porque puedes definir una trayectoria y hacer que un sprite la recorra paso a paso mediante el comando ROUTEALL.

Primeramente, necesitas crear una ruta. Para ello necesitas editarla en el fichero routes_tujuego.asm.

Cada ruta posee un número indeterminado de segmentos (aunque la longitud máxima de una ruta son 255 bytes) y cada segmento tiene tres parámetros:

  • Cuantos pasos vamos a dar en ese segmento (entre 1 y 250)
  • Qué velocidad Vy se va a mantener durante el segmento (-127 ≤ Vy ≤ 127)
  • Qué velocidad Vx se va a mantener durante el segmento (-127 ≤ Vx ≤ 127)

Como una ruta puede medir a lo sumo 255 bytes y un segmento ocupa 3 bytes, una ruta puede tener como mucho 84 segmentos.

rutas avanzadas

Pero espera… ¿Es posible que no sepas nada de 8 Bits de Poder? Puedes leer el primer artículo del curso de programación en Amstrad CPC de 8BP.

Al final de la especificación de segmentos debemos poner un cero para indicar que la ruta se ha terminado y que el sprite debe comenzar a recorrer la ruta desde el principio.

Veamos un ejemplo:

; LISTA DE RUTAS
;================
;pon aqui los nombres de todas las rutas que hagas
ROUTE_LIST
	dw ROUTE0
	dw ROUTE1
	dw ROUTE2
	dw ROUTE3
	dw ROUTE4
; DEFINICION DE CADA RUTA
;==========================
ROUTE0; un circulo
;-----------------
	db 5,2,0; cinco pasos con Vy=2
	db 5,2,-1; cinco pasos con Vy=2, Vx=-1
	db 5,0,-1
	db 5,-2,-1
	db 5,-2,0
	db 5,-2,1
	db 5,0,1
	db 5,2,1
	db 0

ROUTE1; izquierda-derecha
;-------------------------
	db 10,0,-1
	db 10,0,1
	db 0

ROUTE2; arriba-abajo
;--------------------
	db 10,-2,0
	db 10,2,0
	db 0

ROUTE3; un ocho
;-----------------
	db 15,2,0
	db 5,2,-1
	db 5,0,-1
	db 25,-2,-1
	db 5,0,-1
	db 5,2,-1
	db 15,2,0
	db 5,2,1
	db 5,0,1
	db 25,-2,1
	db 5,0,1
	db 5,2,1
	db 0

ROUTE4; un loop y se va hacia la izquierda
;---------------------
	db 120,0,-1
	db 10,-2,-1
	db 20,-2,0
	db 10,-2,1
	db 5,0,1
	db 10,2,1
	db 20,2,0
	db 10,2,-1
	db 80,0,-1
	db 0

Trayectorias complejas, definición de rutas

Ahora para usar las rutas desde BASIC, simplemente asignamos la ruta a un sprite con el comando SETUPSP indicando que queremos modificar el parámetro 15, que es el que indica la ruta. Además, hay que activar el flag de ruta (bit 7) en el byte de status del sprite y le pondremos con el flag de movimiento automático y el de animación y el de impresión.

10 MEMORY 23999     
11 ON BREAK GOSUB 280
20 MODE 0:INK 0,0
21 LOCATE 1,20:PRINT "comando |ROUTEALL y macrosecuencias de  animacion"
30 CALL &6B78:DEFINT a-z   
31 |SETLIMITS,0,80,0,200
40 FOR i=0 TO 31:|SETUPSP,i,0,0:NEXT 
41 x=10
50 FOR i=1 TO 8
51 x=x+20:IF x>=80 THEN x=10:y=y+24
60 |SETUPSP,i,0,143: rem con esto activo el flag de ruta 
70 |SETUPSP,i,7,2:|SETUPSP,i,7,33: rem macrosecuencia de animacion
71 |SETUPSP,i,15,3: rem asigno la ruta numero 3
80 |LOCATESP,i,30,70  
82 FOR t=1 TO 10:|ROUTEALL:|AUTOALL,0:|PRINTSPALL,1,0:NEXT
91 NEXT
100 |AUTOALL,1:|PRINTSPALL,1,0: rem aqui AUTOALL ya invoca a ROUTEALL
120 GOTO 100
280 |MUSIC:MODE 1: INK 0,0:PEN 1

Ya lo tenemos todo. Esta técnica avanzada te va a simplificar la programación muchísimo con resultados espectaculares.

trayectorias complejas
Trayectorias complejas, una ruta en forma de 8

Como has visto, el comando no modifica las coordenadas de los sprites, de modo que deben ser movidos con AUTOALL e impresos (y animados) con PRINTSPALL. Es por ello que dispones de un parámetro opcional en |AUTOALL, de modo que AUTOALL,1 invoca internamente a ROUTEALL antes de mover el sprite, ahorrándote una invocación desde BASIC que siempre va a suponer un precioso milisegundo.

En el siguiente capítulo del curso 8BP veremos como colocar un sprite en medio de una ruta con el comando |ROUTESP

Hasta aquí hemos llegado por hoy con el curso de programación en Amstrad CPC de 8 bits de poder Si tienes alguna duda puedes escribir en comentarios y te contestaré lo antes posible.

Todos los recursos, como manuales, ejemplos y juegos compilados de este curso los puedes encontrar en el repositorio Github de 8BP.

Hasta la semana que viene amigos 😄

¿Te ha Resultado útil este artículo?

Ayúdanos a mejorar y danos tu opinión:

Mostrar más

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