Crea tus Juegos con 8BP

8BP: Cambios de estado forzados entre rutas

3.8
(5)

Hola amigos de 8BP. En esta entrega del curso vamos a ver como hacer cambios de estado forzados entre rutas y cómo va a afectar al rendimiento de nuestro juego, para nuestro Amstrad CPC, ¡Empezamos! 😄

Cambios de estado forzados entre rutas

Esta capacidad es muy interesante para acelerar tus juegos y está disponible desde la V27 de 8BP. Consiste en que podemos forzar un cambio de estado en mitad de una ruta. Para ello indicaremos que deseamos un cambio de estado indicando como valor de número de pasos del segmento = 255.

El cambio de estado es un segmento más y es importante que mantengas el mismo número de parámetros por segmento, es decir, 3 bytes. Un cambio de estado a status=13 podria escribirse como:

255,13,0

El tercer parámetro (el cero) no significa nada, es solo un “relleno” para que el segmento mida 3 bytes, pero es imprescindible.

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.

El valor 255 le indicará al comando ROUTEALL que lo que debe hacer esta vez es cambiar el estado del sprite, asignándole el que se indique a continuación. El cambio de estado se ejecuta sin consumir un paso, por lo que siempre se ejecutará el siguiente paso al cambio de estado.

Si no queremos que el sprite se mueva más, simplemente definiremos un segmento de un paso sin movimiento en X ni en Y justo después del cambio de estado. Veamos un ejemplo:

ROUTE3; disparo_dere
;-----------------
	db 40,0,2; cuarenta pasos a la derecha con Vx=2
	db 255,0,0; cambio de estado a cero
	db 1,0,0; quieto Vy=0, Vx=0
	db 0

ROUTE4; disparo_izq
;-----------------
	db 40,0,-2; cuarenta pasos a la izquierda con Vx=-2
	db 255,0,0; cambio de estado a cero
	db 1,0,0; quieto Vy=0, Vx=0
	db 0

Estas dos rutas las vamos a usar para disparar con nuestro personaje. La primera de ellas, tras recorrer 40 pasos en los que avanza 2 bytes en X, sufre un cambio de estado y el sprite pasa a estado 0, es decir, desactivado. El siguiente segmento solo tiene un paso y no hay movimiento (vy=0, vx=0).

Con este mecanismo podemos disparar y que los disparos se desactivan solos cuando se salen de la pantalla. Ello ahorra lógica de BASIC y acelera nuestros juegos. En el siguiente ejemplo, la imagen 26 es el disparo.

forzados
Disparos con cambio de estado de ruta
10 MEMORY 23999
20 MODE 0: DEFINT A-Z: CALL &6B78:' install RSX
25 ON BREAK GOSUB 280
30 CALL &BC02:'restaura paleta por defecto por si acaso
40 INK 0,0:'fondo negro
50 FOR j=0 TO 31:|SETUPSP,j,0,&X0:NEXT:'reset sprites
80 |SETLIMITS,12,80,0,186: ' establecemos los limites de la pantalla de juego
90 x=40:y=100:' coordenadas del personaje
100 |SETUPSP,0,0,1:' status del personaje
110 |SETUPSP,0,7,1:dir=1:'secuencia de animacion asignada al empezar
120 |LOCATESP,0,y,x:'colocamos al sprite (sin imprimirlo aun)
125 |MUSIC,0,0,6
126 for i=1 to 4:|SETUPSP,10+i,9,26:next:'disparos
130 'ciclo de juego---
150 |AUTOALL,1:|PRINTSPALL,0,0
170 ' rutina movimiento personaje -------------
180 IF INKEY(27)=0 THEN IF dir=2 THEN dir=1:|SETUPSP,0,7,dir ELSE |ANIMA,0:x=x+1:GOTO 191
190 IF INKEY(34)=0 THEN IF dir=1 THEN dir=2:|SETUPSP,0,7,dir ELSE |ANIMA,0:x=x-1
191 IF espera<ciclo-10 then if INKEY(47)=0 THEN espera=ciclo:disp= 1+ disp mod 4 :|LOCATESP,10+disp,y+8,x: |SETUPSP,10+disp,0,137: |SETUPSP,10+disp,15,2+dir
200 |LOCATESP,0,y,x
201 ciclo=ciclo+1
210 goto 150
280 |MUSIC:MODE 1: INK 0,0:PEN 1

Los cambios de estado se pueden forzar en cualquier segmento de la ruta, no necesariamente al final, aunque en el caso de un disparo es muy lógico hacerlo al final de la ruta.

En el siguiente capítulo del curso veremos los cambios de secuencia forzados entre rutas usando un segmento especial.

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 😄

Imagen de portada realizada por: Demoniak / cover image, made by Demoniak

¿Te ha Resultado útil este artículo?

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

Mostrar más

2 comentarios

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