|
|
|||||||||
| El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España para ofrecer los artículos de la revista Amiga World España. |
Para mostrar un Sprite en pantalla son necesarias las siguientes consideraciones: Los datos de los Sprites, es decir, su imagen, tamaño, color, posición de la pantalla donde se quieren visualizar. Veamos primero las posiciones x-y en las que se puede visualizar el Sprite. En cuanto a la x (horizontal) el rango varía de 0 a 447. Para que el objeto sea visible tiene que tener la pantalla unos límites, es decir, la del ancho de 320 pixels que corresponden a la baja resolución. Esto hace que el rango de valores para la visualización es de 64 a 383, un valor fuera de estos límites haría que el objeto no se viera. Para poder calcular la coordenada exacta en la que se ha de posicionar el objeto se les ha de sumar 64. Si queremos por ejemplo que el Sprite aparezca 80 pixels a partir del margen derecho el valor exacto a utilizar es 80+64=144. En cuanto a la Y (vertical) el caso es igual, los rangos a utilizar están en los valores 0 a 262. Para su visualización se manejan los valores entre 44 y 243, que corresponden a una pantalla de 200 pixels de alto en baja resolución. Poniendo un ejemplo para presentar un Sprite en el punto 40,100 a partir de la esquina superior izquierda los valores a utilizar serían 104 y 144. El único problema se dará cuando manejemos una pantalla de más resolución, las coordenadas no cambian, ya que en las que se mueve el Sprite corresponden a una de baja resolución. Esto hace que por ejemplo en una pantalla de alta resolución (640x400) la coordenada 640,400 de ésta sería para el Sprite la mitad ya que maneja el mismo rango de coordenadas. El ancho máximo que puede tener un Sprite es de 16 pixels y el alto puede ser cualquiera. Si quieres uno más ancho que el permitido puedes utilizar la técnica de empalmar Sprites, es decir, de situar la esquina superior derecha del primero con la esquina superior izquierda del segundo, y mover los dos a la vez, debiendo utilizar la coordenada vertical del izquierdo más 16 pixels que es la del siguiente y con la misma coordenada horizontal ya que se encuentran a la misma altura. En el caso de que se utilice una resolución mayor, el tamaño real en pantalla no variará la resolución del Sprite. Los colores de los Sprites son una delimitación, pudiendo utilizar tres colores más un color cero o transparente por cada grupo de dos. En total son 16 colores que se podrán variar en los registros de la tabla del 16 al 31: Corresponden a las posiciones de los Custom Chips desde $DFF1A0 a $DFF1BE y han de usarse dentro del Copperlist. Para el diseño de un Sprite será conveniente que se dibuje el mismo en una hoja cuadriculada donde se ha de distinguir los colores del 0 al 3 (el 0 como transparente).
Un ejemplo sería éste: 0000112232211000
0001122333221100
0011223333322110
0001122333221100
0000112232211000
A continuación deberemos pasar estos números en binario, utilizando dos palabras (words) por cada línea horizontal, que van a ser palabra alta y palabra baja. Las palabras en total que va a tener el Sprite es el del número de líneas multiplicado por dos, por lo tanto cada línea tendrá 32 bits correspondientes a la palabra alta y palabra baja. Los bits en la alta palabra corresponden al bit izquierdo de cada código binario del color, así como los bits en la segunda palabra corresponden a los bit derecho de cada color en el píxel. El resultado para la primera línea sería éste: Valor del color 0 0 0 0 1 1 2 2 3 2 2 1 1 0 0 0
Primera palabra 0 0 0 0 1 1 0 0 1 0 0 1 1 0 0 0 = $0c98
Segunda palabra 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 = $03E0
Ahora se transforma cada línea como palabra en hexadecimal, dando el valor definitivo para utilizarlo en nuestro programa. Este mismo proceso se deberá hacer para todas las líneas, a no ser que se posea algunos de los programas de dominio público que permiten el diseño de Sprites. Los valores binarios de cada píxel corresponden a un número de registro de color, siendo para cada Sprite el siguiente:
El valor 00 corresponde al transparente y por lo tanto no es necesario cambiar el registro. Ahora que ya sabemos los datos de los pixels pasaremos a la estructura que va a tener todo el Sprite, en el cual algunas de sus palabras corresponden a información de situación en pantalla. Para crear la totalidad de la estructura de un Sprite se necesita:
El siguiente cuadro representa la estructura en la memoria de un Sprite: En memoria por palabras (2 bytes)
Toda esta estructura está alineada por palabras, es decir, que cada una de ellas ha de estar en posiciones de memoria pares y se ha de situar en la zona de memoria Chip para poder se accedidas por los Custom Chips. Las dos primeras palabras en la estructura del Sprite contienen las posiciones en las que se coloca el Sprite. La primera de ellas tiene en cada byte la sprint vertical (coordenada y) y la horizontal (coordenada x) respectivamente. La segunda palabra de control contiene la sprint final del Sprite, es decir, la sprint horizontal anterior más el número de líneas menos 1, siendo por ejemplo para nuestro Sprite el valor 5 ya que tiene 6 líneas. Además, en la misma palabra contiene datos correspondientes a los bits altos de las tres posiciones. La estructura en la palabra segunda de control es la siguiente:
Los tres últimos bits sirven de expansión, es decir, para la coordenada horizontal un Sprite no pasaría de la posición 255 ya que es el máximo permitido por 8 bits o un byte. Para que llegue se le ha incluido un bit de expansión o bit alto permitiendo un rango hasta 511. Lo mismo ocurre para las dos posiciones verticales. La estructura final para visualizar nuestro Sprite en el máximo vertical 50 y horizontal 60 es el listado 2. Para cambiar la SPRINT de Sprite es suficiente cambiarlo en las posiciones vertical, horizontal y vertical final situados en esta misma estructura. Al observar el Custom Chip que ha variado el número realiza el cambio de posición. Se ha de tener el cuidado de cambiar estas coordenadas cuando haya comenzado la línea de barrido en la parte superior de la pantalla, ya que si chequea el cambio de número cuando el 68000 lo está variando se produce un salto visible y no deseado.
Los Sprites también tienen sus prioridades en pantalla, teniendo la máxima prioridad el Sprite 0, así hasta el octavo. Esto quiere decir que si situamos los ocho Sprites en la misma posición, el único visible será el primero y así hasta el último. Comentamos anteriormente que hay la posibilidad de presentar más de ocho Sprites en pantalla. Para ello simplemente se ha de añadir otra serie de datos detrás de cada Sprite que se quiere utilizar de nuevo. El único problema es que se les ha de separar una línea horizontal entre los nuevos Sprites, es decir, no se han de cruzar los primeros con los que se quieren duplicar. Esto lo podrá observar en el ejemplo de hoy, en el que utilizaremos en pantalla ocho Sprites, pero en realidad son cuatro, pues se repiten al situar los datos detrás de los de cada Sprite. Hay otros registros muy importantes que se utilizan para activar los Sprites y apuntar a sus datos. Son éstos.
Estos últimos registros están repartidos cada cuatro por Sprite de esta forma están vertical-horizontal de comienzo al igual que al comienzo de cada grupo de datos:
Este es el programa que visualiza lo anteriormente dicho (ver listado 1). Explicando el programa la visualización de estos Sprites se produce utilizando dos bitplanes, ajustando sus colores en el Copperlist. Este último se utiliza también para apuntar a los dos bitplanes, y ajustar sus coordenadas en pantalla (offsets esquina superior izquierda). El programa ajusta que interrupciones en DMA que va a permitir como son la de los Sprites, Copper y Bitplanes. El método utilizado para realizar el movimiento en pantalla de los Sprites es el de situar su rutina principal en una interrupción del 68000, es decir, una de las que realiza solamente el microprocesador, haciendo que este movimiento se realice de una manera limpia y suave. Como he explicado en anteriores capítulos esta interrupción hace pasar todo el proceso del microprocesador 50 veces por segundo para realizar cualquier rutina que nosotros queramos. Esta velocidad exacta hace que la visualización de los Sprites sea correcta, en contraposición de las anteriores y primitivas técnicas, que situaban esta rutina en la programación principal.
Otra cualidad de esta rutina es el de situar correctamente las coordenadas de ocho Sprites mediante tablas e índices. Esta técnica saca cuatro coordenadas y las sitúa en la etiqueta PUNTERO del programa para insertarlas debidamente al comienzo de cada estructura de los Sprites 0 a 3. Los cuatro restantes Sprites tienen la misma coordenada horizontal que los anteriores. Los índices (INDEX) se utilizan para retrasar en número constante (7, 14, y 21) las coordenadas y así conseguir el efecto estela. La rutina como podrá comprobar es complicada, pero es muy útil para ver lo que se puede hacer con Sprites. Se puede variar la velocidad insertando saltos condicionales cuando se realice la interrupción. Esto es todo por lo que respecta a los gráficos, esperamos que le haya sido de utilidad.
|
| Envía esta página web a un amigo: Esta opción está desactivada temporalmente, rogamos disculpen las molestias |
|