Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
cursos:z88dk:sprites2 [10-08-2007 10:04]
sromero
cursos:z88dk:sprites2 [24-02-2020 20:24] (actual)
falvarez
Línea 1: Línea 1:
 +Publicado originalmente en [[https://magazinezx.speccy.org/12/z88dk.html|MagazineZX número 12]] (septiembre 2005)
 +
 +====== Curso de Z88DK: Sprites (II) ======
  
 ===== ¡Mis Sprites se mueven! ===== ===== ¡Mis Sprites se mueven! =====
Línea 524: Línea 527:
  
 Por último, una cosa curiosa: si mientras movemos el coche pasamos por encima de donde pone Bytes: movimiento (correspondiente a la carga desde cinta) veremos como el borrado y la escritura del sprite del coche no afecta en lo mas mínimo a los píxeles que forman parte de ese texto; esto es sin duda otra de las grandes ventajas de usar el modo de dibujado de sprites or exclusiva. Por último, una cosa curiosa: si mientras movemos el coche pasamos por encima de donde pone Bytes: movimiento (correspondiente a la carga desde cinta) veremos como el borrado y la escritura del sprite del coche no afecta en lo mas mínimo a los píxeles que forman parte de ese texto; esto es sin duda otra de las grandes ventajas de usar el modo de dibujado de sprites or exclusiva.
 +
  
 ===== Y ahora, pongamos el coche en una pista ===== ===== Y ahora, pongamos el coche en una pista =====
Línea 532: Línea 536:
 Dentro de coches.h es donde definiremos el trazado de la pista. Si consideramos la pantalla como un array de 18x24 casillas de tamaño 10x10 (el mismo que los neumáticos), podemos indicar el recorrido de la pista creando un array, donde colocaremos ceros en aquellas casillas donde no vaya a haber neumático, y unos en las casillas en las que sí. Al principio de coches.h definimos unas constantes para el tamaño del circuito: Dentro de coches.h es donde definiremos el trazado de la pista. Si consideramos la pantalla como un array de 18x24 casillas de tamaño 10x10 (el mismo que los neumáticos), podemos indicar el recorrido de la pista creando un array, donde colocaremos ceros en aquellas casillas donde no vaya a haber neumático, y unos en las casillas en las que sí. Al principio de coches.h definimos unas constantes para el tamaño del circuito:
  
 +<code c>
 #define ALTURA_CIRCUITO 18 #define ALTURA_CIRCUITO 18
 #define ANCHURA_CIRCUITO 24 #define ANCHURA_CIRCUITO 24
 +</code>
  
 y al final del mismo archivo incluimos el siguiente array: y al final del mismo archivo incluimos el siguiente array:
  
 +<code c>
 short circuito1[] =  { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, short circuito1[] =  { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     0, 0, 0, 0, 0, 0, 0 };     0, 0, 0, 0, 0, 0, 0 };
Línea 578: Línea 585:
     circuito12, circuito13, circuito14, circuito15, circuito16, circuito17,     circuito12, circuito13, circuito14, circuito15, circuito16, circuito17,
     circuito18};     circuito18};
 +</code>
  
-Con un poco de imaginación podemos vislumbrar en ese array un circuito cerrado en forma de O. Si ahora creamos un fichero llamado juego.c, que contenga el mismo código que movimiento.c, pero añadiéndole el que aparece en color rojo a continuación, podremos por fin ver nuestro circuito en la pantalla, tal como se ve en la siguiente imagen:+Con un poco de imaginación podemos vislumbrar en ese array un circuito cerrado en forma de O. Si ahora creamos un fichero llamado **juego.c**, que contenga el mismo código que movimiento.c, pero añadiéndole el que aparece en color rojo a continuación, podremos por fin ver nuestro circuito en la pantalla, tal como se ve en la siguiente imagen:
  
 +<codec>
 void main(void) void main(void)
 { {
Línea 586: Línea 595:
         int y = 140;         int y = 140;
         int posicion = 0;         int posicion = 0;
-        short int i+        short int ij;         // nuevo
-        short int j;+
  
         char *puntero1 = (char *) 23561;         char *puntero1 = (char *) 23561;
Línea 598: Línea 606:
         int ciclos = CICLOS_BASE;         int ciclos = CICLOS_BASE;
  
 +        // nuevo (Principio)
         for (i=0;i<30;i++)         for (i=0;i<30;i++)
                 printf("\n");                 printf("\n");
  
-        for (i=0;i +        for (i=0;i<ALTURA_CIRCUITO;i++) 
- +                for (j=0;j<ANCHURA_CIRCUITO;j++) 
-        putsprite(spr_xor,x,y,sprites[0]);+                        if (circuito[i][j] == 1) 
 +                                putsprite(spr_xor,j*10+1,i*10+1,sprites[8]); 
 +        // nuevo (Fin)
  
         while(1)         while(1)
Línea 610: Línea 621:
                 *puntero2 = 1;                 *puntero2 = 1;
                 asm("halt");                 asm("halt");
 +</code>
 +
  
-Figura 4. Nuestro coche dispuesto a ser el rey de la pista +{{ cursos:z88dk:z88dk7_4.png |Nuestro coche dispuesto a ser el rey de la pista}}
-Figura 4. Nuestro coche dispuesto a ser el rey de la pista+
  
 Hay que tener en cuenta que hemos cambiado el valor inicial de la coordenada y del coche para que éste quede dentro de la pista. También hemos creado dos variables, i y j que nos van a servir de contadores en un par de bucles. Hay que tener en cuenta que hemos cambiado el valor inicial de la coordenada y del coche para que éste quede dentro de la pista. También hemos creado dos variables, i y j que nos van a servir de contadores en un par de bucles.
Línea 949: Línea 961:
  
  
-    * [[http://www.speccy.org/magazinezx/revistas/12/src/z88dk_coches.zip|Código fuente de los ejemplos]]+    * [[https://magazinezx.speccy.org/12/src/z88dk_coches.zip|Código fuente de los ejemplos]]