Tutorial de ZX Basic + Fourspriter #6: Ahora sí que sí

Vale, el capítulo de antes era para ver si compilaba todo junto (nuestro programa, el fourspriter y el spriteset). Ahora sí que sí vamos a usar fourspriter. Vamos a hacer que un muñeco rebote por toda la pantalla. Para eso necesitamos cuatro variables, x, y, mx y my. Lo suyo es definirlo todo al principio del programa, antes del código, debajo de los includes y encima de donde pone “empezamos“. Como vamos a manejar coordenadas de caracter, nos basta con un byte para cada variable, así que las definimos así:

Dim x, y, mx, my as uByte

Si necesitásemos más, tendremos Integer o uInteger para enteros de 16 bits con o sin signo, y luego tipos de punto flotante que no usaremos nunca. Las cadenas, como hemos visto en el Sub, se definen como “as String“. Si habéis programado en Visual Basic, QuickBasic o freeBasic todo esto os sonará de cojones, porque es la misma sintaxis.

Una vez definidas las variables, nos vamos debajo de nuestras llamadas a centrar y les damos unos valores iniciales:

x = 15: y = 11
mx = 1: my = 1

Esto hará que el muñeco aparezca en el centro de la pantalla moviéndose hacia abajo a la derecha.

¡Ahora empezamos con fourspriter! Lo primero es decirle a fourspriter de donde tiene que coger los gráficos. Para ello, solo tendremos que llamar a la función fsp21SetGfxAddress pasándole la dirección de memoria donde están los gráficos. ¿Y cómo sabemos en qué dirección de memoria está nuestro array spriteset? Pues con el operando @:

fsp21SetGfxAddress (@spriteset (0))

Ahora vamos a definir los sprites. Bueno, el sprite, que empezaremos con uno solo. Fourspriter es una biblioteca que se encarga de actualizar ella misma la pantalla siempre que se llame a una función de actualización. Lo único que tenemos que hacer nosotros es definir qué gráficos y de qué colores usa cada sprite, si está activo o no, y donde está.

Empecemos definiendo los gráficos y sus colores. Esto se hace con estas llamadas a funciones de fourspriter. Vamos a usar el sprite 3 (de 0, 1, 2 o 3, el último). ¿Por qué el 3? Pues porque sí. Usa otro si te da más coraje.

fsp21SetGfxSprite (3, 0, 1, 2, 3)
fsp21ColourSprite (3, 71, 70, 70, 70)

La primera linea sirve para definir los cuatro bloques que formarán el sprite. Primero recibe el número del sprite y luego los cuatro bloques. Estamos diciendo que el sprite 3 usará los bloques 0, 1, 2 y 3. Esto se puede cambiar en cualquier momento, por ejemplo para animar el sprite. Basta con llamar de nuevo a fsp21SetGfxSprite.

La segunda linea le da los colores. Primero recibe el número del sprite y luego cuatro atributos. Recordad, INK + BRIGHT*64. Esta versión de fourspriter ignora el PAPER porque usa el del fondo. En este caso, estamos diciendo que la esquina superior izquierda sea blanco intenso (7+64) y el resto amarillo intenso (6+64).

Bien. Lo próximo es colocar a nuestro sprite en algún sitio. Para ello hacemos:

fsp21MoveSprite (3, x, y)
fsp21DuplicateCoordinatesSprite (3)

Que moverá nuestro sprite a la posición indicada por las variables x e y. La segunda linea solo es necesaria cuando estemos colocando el sprite POR PRIMERA VEZ. Lo que hace es rellenar correctamente dos variables internas que almacenan donde “estaba” el sprite antes de moverlo.

Luego indicamos a la biblioteca que el sprite 3 estará ACTIVO (se pintará en pantalla, originalmente los cuatro sprites están desactivados y la biblioteca no pinta nada):

fsp21ActivateSprite (3)

(Para desactivar un sprite se usa fsp21DeactivateSprite (n)). Por último, llamamos a fsp21InitSprites, que capturará el fondo que hay detrás de cada sprite activo antes de empezar la animación:

fsp21InitSprites ()

Una vez hecho esto, haremos nuestro bucle estúpido. Lo que se suele hacer es lo siguiente: primero se actualizan las coordenadas del sprite x e y, luego se mueve el sprite a dichas coordenadas con fsp21MoveSprite, y luego se llama a la función fsp21UpdateSprites, que actualizará en pantalla la posición de los sprites activos restaurando el fondo y toda la guasa. En pseudocódigo:

BUCLE
Actualizar x e y
fsp21MoveSprite (3, x, y)
fsp21UpdateSprites ()
FIN BUCLE

En código BASIC nos quedarías así:

While Inkey = ""

   ' Esto es para que no vaya tan rápido.
   ' Simplemente espera 2 interrupciones
   ' (40 ms aproximadamente)

   Asm
      halt
      halt
   End Asm

   ' Actualizamos coordenadas
   
   x = x + mx
   y = y + my
   
   If x = 0 Or x = 30 Then 
      mx = -mx
   End If
   
   If y = 0 Or y = 22 Then
      my = -my
   End If

   ' Movemos el sprite
   
   fsp21MoveSprite (3, x, y)
   
   ' Actualizamos en pantalla
   
   fsp21UpdateSprites ()
Wend

Básicamente, se repetirá todo mientras no se pulse una tecla. El código Asm que hay con los dos halts simplemente espera dos interrupciones para perder algo de tiempo y que vaya más lento.

Podéis descargaos el proyecto que estamos creando pulsando aquí mismo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: