Crea tus Juegos con 8BP

8BP: Cómo optimizar el código del juego

4.7
(7)

Hola amigos de 8 bits de poder. En la entrega de hoy del curso de 8BP, para Amstrad CPC, vamos a ver como optimizar el código del juego utilizando diversas técnicas. ¡Vamos a ello! 👌

Cómo optimizar el código del juego

Eliminar cualquier comentario en la lógica de juego y si dejas alguno que sea REM (más rápido), no uses la comilla. Si usas la comilla es para ahorrar 2 bytes de memoria, y es adecuado para comentar el resto del programa (inicializaciones y cosas así). Si quieres comentar partes de lógica puedes hacer lo siguiente:

If x>23 gosub 500
…
499 rem por esta linea no se pasa y asi comento esta rutina
500 if x > 50 THEN ...
…
550 RETURN

Optimizar el código del juego

Cada comentario que ejecutes consume 0.20 ms y ahorrar su ejecución es muy fácil sin por ello dejar de poner comentarios. Hay ocasiones en las que puedes poner comentarios en líneas siempre que haya saltos (GOTO y GOSUB/RETURN) sin miedo a gastar nada de tiempo, veamos algunos ejemplos:

10 goto 50 : rem este comentario no consume tiempo
20 gosub 200: rem este comentario no consume tiempo
200 return: rem este comentario no consume tiempo

Optimizar el código del juego

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.

optimizar el código del juego
Vamos a optimizar el código

Sólo muere un sprite en cada ciclo

El comando COLSPALL de 8BP esta pensado con “lógica masiva”. Esto significa que potencialmente te detecta la colisión de todos los sprites, pero en cuanto detecta una colisión te retorna indicando quien es el sprite colisionador y quien el colisionado.

En ese momento puedes anular al sprite colisionado (desactivando su capacidad de ser colisionado en el bit 1 de su byte de estado) y volver a lanzar el comando, hasta que no haya más colisiones (te retorne un 32 en el colisionador y el colisionado).

Sin embargo, lo más eficiente es no volver a lanzar el comando hasta el siguiente ciclo de juego. Esto significa que solo un enemigo podrá morir en cada fotograma, pero es una limitación imperceptible que acelerará mucho tus juegos.

Rutas que aceleran el juego manipulando el estado

Puedes hacer rutas que activen y desactiven alternativamente el flag de colisionador o de colisionable en tus sprites. Dependiendo del tipo de enemigo, esto te puede proporcionar velocidad extra en el comando de colisión. Las rutas se explican en un capítulo posterior de modo que antes de leer esto conviente que te familiarices con ellas.

Por ejemplo, si tienes 8 enemigos en pantalla, puedes hacer que en los ciclos pares haya 4 colisionables y en los ciclos impares los otros 4. Para ello puedes hacer una ruta como la siguiente:

ROUTE1; 
;-------------------------
	db 1,0,1
	db 255,128+8+2+1,0 ; cambio de estado a colisionable
	db 1,0,1
	db 255,128+8+1,0 ; cambio de estado a no colisionable
	db 0

Optimizar el código del juego

Esta ruta cambia el estado de tu sprite, a la vez que lo mueve hacia la derecha. Si un sprite tiene asignada esta ruta, se moverá hacia la derecha y alternativamente será colisionable y no colisionable.

Puedes asignar la ruta a 8 sprites y después ejecutar el siguiente comando sobre 4 de los sprites:

|ROUTESP, <sprite_id>, 1

Con ello, el comando de colisión COLSPALL será más rápido pues solo tendrá que detectar colisiones con 4 enemigos colisionables en cada fotograma. Este truco acelera un poco tu juego y unido a otros trucos puedes alcanzar finalmente los FPS que necesites

El mismo truco te permite activar y desactivar el flag de impresión (bit 0 del estado) y en una ruta donde el enemigo pase algún fotograma sin moverse, puedes desactivar el flag de impresión a través de la ruta y así acelerar el comando PRINTSPALL.

En el siguiente capítulo del curso de 8BP veremos cómo enrutar los sprites con lógicas masivas.

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

3 comentarios

Deja una respuesta

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

Publicaciones relacionadas

Mira también
Cerrar
Botón volver arriba