Revistas en papel
 Amiga World Nº7 - Febrero 1990
Anterior
Menú
Logotipo

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.

ANIMACION DEL PUNTERO Amiga World


Por F. Javier Rodríguez

Habrán podido observar,
seguramente todos
los días, un gráfico
que se mueve a
través de la pantalla
del Amiga a medida
que se mueve el
ratón. También
habrán podido
observar, en alguno
de los discos
publicados por la
revista, un puntero animado.

Este puntero animado habrá hecho pensar, probablemente a más de uno, que esto sólo se podría conseguir mediante un sofisticado programa. En este artículo se mostrará cómo conseguirlo en uno de los lenguajes más fáciles y populares: el AMIGABASIC.

Seguramente ya sabrán que su principal función es la de "apuntar" a los diferentes iconos, Gadgets, elementos de trabajo, etc.; sin embargo mediante la animación se conseguirá un uso más elegante del mismo.

Para empezar decir que dicho puntero no está limitado a tener siempre la misma imagen, pues con un programa PREFERENCES se pueden cambiar este y otros parámetros diferentes como pueden ser el modo gráfico, opciones para impresora, etc.

Centrándonos en el Preferences y más concretamente en su opción EDIT POINTER, comprobarán que cambiar la imagen del puntero no es tan difícil, ya que sólo deberán limitarse a crear una nueva imagen con las diferentes ayudas del editor.

Una vez se ha creado la nueva imagen, se dispone de tres opciones: Cancelar, Usar y por último Salvar. Si se elige esta última opción, los diferentes valores de la imagen creada, junto con otros parámetros serán grabados en el fichero SYSTEM-CONFIGURATION (del directorio DEVS).

Pero... ¿por qué me cuenta todo esto? Muy sencillo: la base de cualquier animación, es en realidad el resultado de representar diversas imágenes en una determinada secuencia y a una determinada velocidad; con lo cual se conseguirá dar una cierta sensación de movimiento. Como les he explicado anteriormente habrán comprobado que es posible cambiar dicha imagen en un fichero. Así se deduce que es posible animar dicho objeto con la creación de diferentes secuencias.

Las secuencias (o animaciones creadas con los programas HUNTPOINTER o PROGANIM (así como los propios programas) sobre un modelo AMIGA, podrán ser cargadas (o ejecutadas) en otros modelos diferentes al utilizado.


La estructura del Puntero

El puntero se corresponde realmente con el Sprite 0 del Amiga. Seguramente ya sabrán que la estructura de un Sprite es de 16 pixels de alto por 4 de ancho, además de poder utilizar un máximo de cuatro colores.

Sabiendo que la cantidad de colores está relacionada proporcionalmente con la cantidad de Bitplanos (planos de bit), se deduce que el total de planos es de dos (SQR (4)), por lo que en total la cantidad de bytes utilizados por el puntero será de 64 bytes ((16y X 4x) X 2 bitplanes).

Dentro de la estructura del Puntero (o Sprite), decir que los bytes se encuentran representados en el siguiente orden: primero bitplanos, después el primer byte de la primera fila del primer bitplano, después el primer byte de la primera fila del segundo bitplano, a continuación el segundo byte de la primera fila del primer bitplano, segundo byte de la primera fila del segundo bitplano... hasta completar las 16 filas existentes.

Si se desea adquirir mayor velocidad de animación, se recomienda compilar el programa con cualquiera de los compiladores existentes.


Comenzando a animar

Una vez conocida la principal estructura del Puntero, es imprescindible conocer en qué porción de memoria se encuentran almacenados los datos del mismo; pues bien a continuación podrán encontrar dichos valores, los cuales dependen directamente de la memoria que posea su ordenador. A continuación podrán encontrar las direcciones de los principales modelos (o modelos con ampliaciones):

Modelo
Dir. inicial
Dir. final

Amiga 512k
20212
20275
Amiga 1Mega
3204
3267
Amiga 2Megas
9956
10019


Conociendo dichos datos será posible cambiar la imagen del puntero fuera de cualquier editor. Pruebe a introducir la siguiente línea desde el AmigaBasic:

FOR T=DIR.INICIAL TO DIR.FINAL: POKE T,INT(RND(1)*255):NEXT

Podrá comprobar cómo la imagen del puntero cambia, de la que tenía a la resultante de 63 valores aleatorios. No es una imagen muy bonita, pero sí es el principio de la animación.

A continuación introduzca las siguientes líneas Basic:

Lazo:
  FOR T=DIR.INICIAL TO DIR.FINAL
  POKE T,INT (RND(1)*255: NEXT
GOTO Lazo
  

El resultado de este programa será su primera animación del puntero, aunque ésta se limite a una cantidad de puntos en movimiento. Habrán observado que sí es posible animar el puntero desde el Basic, pero se presentan unos cuantos inconvenientes:

  1. El funcionamiento del puntero animado se reduce a la ventana Basic, solución: cerrar la ventana en la primera línea Basic.

  2. Se carece de la posibilidad de tomar imágenes o grupos de imágenes, solución: crear dichas imágenes desde un editor compatible o crear un "cazaimágenes".

Estos problemas, así como otros derivados de la animación, son resueltos con la utilización de los programas, escritos en AmigaBasic que se incluyen en este artículo:

HUNTPOINTER: "Caza" la imagen del puntero actual permitiendo su almacenamiento para un posterior uso.

PROGANIM: Completo programa de animación con el puntero.

Para salir de la ventana de ERROR, en cualquiera de los programas, será necesario pulsar el botón izquierdo del ratón.


Huntpointer. Descripción del programa

Gracias a la posibilidad multitarea del Amiga, es posible tener en ejecución, al mismo tiempo, programas escritos en diferentes lenguajes. Este es el principal motivo por el que se escribió este programa, ya que uno de los "problemas" es conseguir imagenes para la animación.

La presentación del programa, así como la elección de las diferentes opciones, se realiza a través de una ventana situada en la parte superior izquierda de la pantalla WorkBench.

El posicionamiento de dicha ventana, así como su tamaño, permite manejar libremente el ratón a través de otros iconos o programas que se encuentran en la pantalla WorkBench (más adelante sabrán su utilidad).

Las diferentes opciones que presenta dichos programas son las siguientes:

- Elección de memoria con la que se va a trabajar.

- Salir del programa 'ESC'

- Cazar la imagen. 'F1'

Con la primera de las opciones se deberá introducir el valor correspondiente a la cantidad de memoria que posea su Amiga. A partir de este punto el programa se limitará a un bucle continuo en el que se representarán únicamente las dos opciones restantes.

La opción "Salir del programa" es evidente, pues al elegir ésta (presionando la tecla ESC) se cierra la ventana del programa; pudiendo ejecutarlo de nuevo con la opción Run de la Barra del menú.

Con la opción "Cazar imagen", el programa pedirá el nombre del fichero en el cual se almacenarán los datos (relativos a la imagen del mismo) que contiene en ese momento el puntero; a continuación se procederá a salvar los mismos.

Anteriormente se describía la posición que ocupa la ventana en la pantalla Workbench, pues bien se utilidad es la siguiente.

  1. Molestar mínimamente a las operaciones que se realicen en la pantalla, tales como apertura de discos, apertura de cajones, pedir INFO, etcétera.


  2. Poder usar el editor de puntero EDIT POINTER para la creación de imágenes, pudiendo almacenarlas posteriormente con el programa HUNTPOINTER.


Huntpointer + Edit Pointer

Para poder crear las imágenes (con EDITPOINTER), y posteriormente salvarlas, serán necesarios los siguientes pasos:

  1. Ejecutar el programa PREFERENCES.


  2. Seleccionar EDITPOINTER.


  3. Crear la imagen deseada y seleccionar OK.


  4. Seleccionar USE.


  5. Activar ventana de HUNTPOINTER.


  6. Pulsar 'F1' (opción grabar imagen).


  7. Repetir estos pasos en cada imagen que se desee crear.

Este programa también resulta útil si se desea "cazar" la imagen de los punteros correspondientes a otros programas.

Todos los ficheros, tanto de lectura como escritura, se leerán/escribirán desde el drive df0:. Sin embargo el cambio de DRIVE o directorio se podrá modificar fácilmente.


ProgAnim. Descripción del programa

ProgAnim es un completo programa para la animación del puntero cuyo manejo es muy sencillo. Todas las funciones así como mensajes al usuario se realizarán a través de la ventana principal, así como de la ventana de error.

Este programa mostrará las opciones en el siguiente orden:

  1. Elección de memoria con la que se va a trabajar.


  2. Cargar Animación (opcional).


  3. Número de secuencias para animación.


  4. Nombre de la/las secuencia/s.


  5. Retardo de la animación (en segundos).

Una vez se está produciendo la animación se tendrá acceso a dos opciones más:

  1. b Salvar animación (todas las secuencias de las que ésta consta).


  2. b Salir del programa.


ProgAnim. Su funcionamiento

En este apartado se describirán las opciones anteriormente señaladas.

  1. Se deberá seleccionar el dígito correspondiente a la memoria del Amiga.


  2. Esta elección es opcional, con ella se podrá cargar una animación completa grabada anteriormente con la opción I.b.


  3. Se deberá introducir el número de secuencias de las que se va a componer la animación; siendo el máximo de diez, este valor se puede cambiar con algunas variaciones en el listado. Dichos ficheros pueden corresponder a los creados con el programa HUNTPOINTER, PUNTERO MAKER (publicado en este mismo número), u otro similar.


  4. Se deberán introducir los nombres de los diferentes ficheros. Si posteriormente, durante el proceso de lectura, se produce algún error se deberá a que el fichero no es del formato adecuado o que alguno de los nombres es erróneo, debiendo introducir los datos correspondientes al número de ficheros así como los nombres de los mismos.


  5. Pausa, en segundos, que se producirá entre el cambio de secuencias (valor minimo=0).

5.I.b Esta opción sirve para salvar a disco una animación completa, para ello debe pulsarse la tecla 'F1'. Posteriormente se podrán diferenciar las secuencias de las animaciones debido a que estas últimas se les añade el sufijo ".ANIM".

I.b Si se desea salir de la animación se deberá pulsar la tecla 'ESC', recuperando el puntero la imagen inicial antes de ser animado (ésta se había salvado en una matriz;variable BUFFER). Asimismo se cerrará, por completo, la ventana del programa.

Para finalizar decirles que los programas presentados son de fácil acomodación para sus propias necesidades.

'
'      ANIMACION DE PUNTERO
'
'      (C) 1990  AMIGA WORLD
'
'      POR:  F. JAVIER RODRiGUEZ
CLEAR 25000
WINDOW CLOSE 1
WINDOW 1,"ANIMACION PUNTERO",(0,0)-(360,80),28,-1
WINDOW OUTPUT 1
CHDIR "DF0:"
MENU OFF  ' ES ACONSEJABLE INTRODUCIR
'           ESTA LiNEA EN LTIMO LUGAR
'
'
BBASE(1)= 20212
BBASE(2)= 3204
BBASE(3)= 9956
DIM BYTESANIM (640)
DIM BUFFER (64)
DIM NOM$ (10)
ON ERROR GOTO TRATERR
MEMORIA:
CLS :PRINT
PRINT "CANTIDAD DE MEMORIA DE SU ORDENADOR"
PRINT :PRINT "1- 512K"
PRINT "2- 1 MEGA"
PRINT "3- 2 MEGAS" :PRINT
LINE INPUT "INTRODUZCA OPCIoN ";MEM$
IF VAL(MEM$) <1 OR VAL(MEM$)>3 THEN MEMORIA
MEM = BBASE (VAL(MEM$))
'
'    AHORA SALVA EN BUFFER ACTUAL IMaGEN DEL PUNTERO
'
FOR T=MEM TO MEM+64:BUFFER (T-MEM)=PEEK (T)
NEXT T
WINDOW 1,"PROGANIM",(0,0)-(360,40),0,-1
CLS:PRINT
LINE INPUT"?ES UNA ANIMACIoN? (S/N) ";R$
IF R$="S" OR R$="s" THEN GOSUB CARGANIM:GOTO RETARDO
NUMFICHE:
CLS:PRINT
LINE INPUT "CANTIDAD DE FICHEROS PARA ANIMACIoN ";FICHE$
IF VAL(FICHE$)<=0 THEN NUMFICHE
IF VAL(FICHE$)>10 THEN PRINT:PRINT "MaXIMO DISPONIBLE 10
FICHEROS":GOSUB RATON:GOTO NUMFICHE
FICHE= VAL (FICHE$)
TOTALBYTES = FICHE*64
'
'    AHORA SALVA EN BUFFER ACTUAL IMaGEN DEL PUNTERO
'
FOR T=MEM TO MEM+64:BUFFER (T-MEM)=PEEK (T)
NEXT T
'
'
'      AQUi SE INTRODUCE EL NOMBRE DE LOS FICHEROS
'
FOR T=1 TO FICHE
CLS
PRINT:PRINT "NOMBRE FICHERO -";T
NEXT
LONJ=0
WHILE FICHE >0
OPEN NOM$(FICHE) FOR INPUT AS 1
FICHE=FICHE-1
FOR T=0 TO 63
BYTESAMO(LONJ)=ASC((INPUT$(1,#1)))
LONJ=LONJ+1
NEXT
CLOSE 1
WEND
RETARDO:
CLS
'
'     AQUI PIDE RETARDO EN SEGUNDOS
'
PRINT
LINE INPUT "RETARDO DE LA ANIMACIoN EN SEGUNDOS ";S$
SEG=1500*VAL(S$)
WINDOW 1,"PROGANIM",(0,0)-(120,0),0,-1
ANIM:
FOR T=0 TO 63
POKE MEM+T,BYTESANIM(OFFSET+T)
NEXT
FOR T=0 TO SEG:NEXT
OFFSET=OFFSET+64
IF OFFSET>=TOTALBYTES THEN OFFSET=0
A$=INKEY$
IF A$=CHR$(27) THEN SALANIM
IF A$="ü" THEN GOSUB SALVANIM
GOTO ANIM
'     RUTINA PARA TRATAR ERRORES
'
TRATERR:
WINDOW 2,"ERROR!!!",(30,0)-(260,60),0
NERR= ERR
PRINT:PRINT "SE HA PRODUCIDO UN ERROR DE"
PRINT "CARGA, REVISE LOS DATOS"
CLOSE 1
GOSUB RATON
WINDOW CLOSE 2
RESUME NUMFICHE
RATON:
WHILE MOUSE(0)<>1
WEND
RETURN
SALANIM:
FOR T=0 TO 63
POKE MEM+T,BUFFER(T)
NEXT T
WINDOW CLOSE 1
END
SALVANIM:
WINDOW 2,"SALVAR ANIMACION",(20,20)-(260,40),0,-1
PRINT:LINE INPUT "NOMBRE FICHERO ";NO$
NO$=NO$+".ANIM"
OPEN NO$ FOR OUTPUT AS 1
FOR T=0 TO TOTALBYTES
BYTE$=CHR$(BYTESANIM(T))
PRINT #1,BYTE$;
NEXT
CLOSE
WINDOW CLOSE 2
RETURN
CARGANIM:
LONJ=0
WINDOW 2,"CARGAR ANIMACION",(20,20)-(300-40),0,-1
CLS:
PRINT:LINE INPUT"NOMBRE DE LA ANIMACION ";NO$
NO$=NO$+".ANIM"
OPEN NO$ FOR INPUT AS 1
WHILE NOT EOF(1)
BYTEANIM(LONJ)=ASC(INPUT$(1,#1))
LONJ=LONJ+1
WEND
CLOSE
WINDOW CLOSE 2
TOTALBYTES=LONJ-64
RETURN
Numero de lineas: 141
  
.273
.120
.273
.288
.273
.877
.443
.224
.108
.914
.601
.37
.277
.273
.273
.267
.144
.798
.205
.341
.583
.938
.220
.677
.978
.326
.918
.644
.477
.130
.114
.273
.841
.273
.61
.150
.745
.933
.341
.998
.301
.933
.50
.518
.244
.421
.196
.644
.273
.841
.273
.61
.150
.273
.273
.416
.273
.666
.313
.619
.61
.557
.740
.136
.200
.791
.65
.746
.61
.56
.89
.881
.313
.273
.107
.273
.463
.209
.42
.597
.261
.791
.237
.61
.983
.37
.648
.846
.467
.921
.143
.67
.273
.594
.110
.964
.148
.182
.56
.522
.231
.622
.665
.526
.89
.357
.854
.433
.988
.150
.224
.992
.358
.817
.819
.204
.354
.598
.956
.357
.61
.533
.231
.357
.45
.557
.400
.599
.312
.204
.293
.271
.164
.746
.89
.533
.231
.350
.357
  


'
'     HUNTPOINTER
'
'     (C) 1990 BY AMIGA WORLD
'
'     POR  F. JAVIER RODRiGUEZ
'
CLEAR 25000
WINDOW CLOSE 1
WINDOW 1,"HUNTPOINTER",(0,0)-(160,60),0,-1
WINDOW OUTPUT 1
PUNTDIR(1)=20212
PUNTDIR(2)=3204
PUNTDIR(3)=9956
ELMEM:
CLS
PRINT "MEMORIA ORDENADOR"
PRINT:PRINT"1- 512K"
PRINT"2- 1 MEGA"
PRINT"3- 2 MEGAS" :PRINT
LINE INPUT "INTRODUZCA OPCIoN ";OP$
IF VAL(OP$)<1 OR VAL (OP$)>3 THEN ELMEM
OP=VAL(OP$)
WINDOW 1,"HUNTPOINTER",(0,0)-(185,40),16,-1
OPCION:
CLS
PRINT :PRINT "F1- CAZA PUNTERO":PRINT
PRINT "ESC- ABANDONAR PROGRAMA"
TECLA:
A$=INKEY$
IF A$="ü" THEN CAZAIMAG
IF A$=CHR$(27) THEN WINDOW CLOSE 1:END
GOTO TECLA
CAZAIMAG:
WINDOW 2,"SALVAR DATOS",(0,0)-(200,40),0,-1
CLS
PRINT:INPUT"NOMBRE FICHERO";NOM$
OPEN NOM$ FOR OUTPUT AS 1
FOR T=PUNTDIR(OP) TO PUNTDIR(OP)+63
PRINT #1,CHR$(PEEK(T)):
NEXT
CLOSE
WINDOW CLOSE 2
GOTO OPCION
Numero de lineas: 44
  
.273
.465
.273
.536
.273
.915
.273
.443
.224
.920
.914
.568
.982
.433
.453
.313
.806
.571
.918
.644
.542
.466
.147
.38
.364
.313
.195
.380
.968
.846
.994
.519
.370
.529
.372
.313
.747
.179
.290
.395
.61
.533
.231
.24
  

Envía esta página web a un amigo:
Esta opción está desactivada temporalmente, rogamos disculpen las molestias

Volver a la página anterior

Al menú principal