| Volver menú revistas | Volver página anterior |
|
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. |
| N°
56 - Julio/Agosto 1994 |
|
TRAYECTORIA DE BOBS EN AMOS |
Con AMOS podemos manejar gráficos y crear animaciones, tales como hacer que un ordenador camine por nuestras pantallas o cualquier cosa que se nos ocurra. Sin embargo, para lograr trayectorias curvas suaves, deberemos emplear funciones matemáticas tales como Seno, Coseno o Tangente. Todas esas funciones son también accesibles desde el AMOS, pero para ello necesitamos acceder a las librerías matemáticas del directorio LIBS: tales como la 'mathieedoutrans.library' o alguna por el estilo con el consiguiente gasto de memoria y pérdida de velocidad. Todo esto es muy fácil de arreglar, sin más que ir metiendo las coordenadas de una serie de puntos diferentes de la trayectoria en cuestión en una tabla de valores, para luego irlos recuperando y mostrando el bob en su sitio correspondiente sin tener que calcular cada vez las coordenadas. Desde el modo directo escribimos una instrucción más o menos como la siguiente:
Esto nos reserva un banco de memmoria de número n y con la longitud deseada. Este banco lo emplearemos como tabla para ir metiendo los diferentes valores que necesitamos. Para ello utilizaremoslas instrucciones:
Escribe el valor dato (comprendido entre 0 y 65536) en la dirección deseada. Esta dirección debe ser una dirección de memoria válida. Para asegurarnos de que esa dirección existe haremos:
Con lo que en la variable INIT tenemos la dirección de memoria del inicio del banco n, que es nuestra tabla, y así incrementando de dos en dos esa dirección podremos acceder a los diferentes valores de la tabla. Digo de dos en dos, porque como la mayoría de las veces utilizaremos resoluciones altas, no podemos conformarnos con coordenadas de un solo byte, para lo que necesitaremos valores de dos bytes.
Así recuperamos el valor almacenado en esa dirección en la variable DATO. Con lo que ya estamos en condiciones de crear nuestra tabla de valores y de recuperarlos cuando nos hagan falta. Unicamente decir que cuando grabamos nuestro programa el banco creado se grabará con él, gracias a que lo hemos definido como banco de datos. Si en alguna ocasión necesitamos un bando de estas características haremos:
Y así el banco no se grabará con el programa. Hay que puntualizar que el AMOS buscará la memoria pedida primero en la FAST y si no es posible lo hara en la CHIP. Si delante de la palabra Data (o Work) ponemos 'Chip' forzaremos al programa a buscar esa memoria en la CHIP. No es una buena idea hacer esto último, ya que podemos encontrarnos ante desagradables sorpresas.
|
Reserve As Data 2,10000
D=Start(2)
Global D
Default Palette 0,4095
Screen Open 0,640,512,2,Hires+Laced
Curs Off
Change Mouse 1
Plot 520,256
Rem **** TRANSFORMACION DE TRAYECTORIA CIRCULAR A ELIPTICA ****
XCENT=320 : YCENT=256 : RADIOX=200
Global XCENT,YCENT
Timer=0
For RADIOY=200 To 0 Step -20
Proc CIRCULO[0,(2*Pi#),RADIOX,RADIOY]
Next
RADIOY=200
Proc CIRCULO[0,(0.5*Pi#),RADIOX,RADIOY]
For RADIOX=200 To 0 Step -20
Proc CIRCULO[(0.5*Pi#),(2.5)*Pi#,RADIOX,RADIOY]
Next
TI=Timer
Hide
Clear Key
Wait Key
Cls 0
Show
Rem **** AHORA PRESENTAMOS LA TRAYECTORIA SIN USAR LAS FUNCIONES ****
N=(D-Start(2))/4 : Rem Calculamos el número de pasos
Plot 520,256 : Rem Situamos el puntero gráfico en las coordenadas iniciales
D=Start(2)
Timer=0
For P=1 To N
X=Deek(D) : Y=Deek(D+2) : D=D+4
Draw To X,Y
X Mouse=X Hard(X)
Y Mouse=Y Hard(Y)
Next
T2=Timer
Default
Print "Tiempo usando las funciones: ";T1
Print "Tiempo sin usar las funciones: ";T2
Print : Print "Expresados en 1/50 de segundo"
Procedure CIRCULO[AI#,AF#,RADIOX,RADIOY]
For ANGULO#=AI# To AF# Step(2*Pi#)/100
Rem **** CALCULAMOS LAS COORDENADAS X e Y ****
X=XCENT+RADIOX*Cos(ANGULO#)
Y=YCENT-RADIOY*Sin(ANGULO#)
Draw To X,Y
Rem **** COLOCAMOS EL RATON EN ESE PUNTO ****
X Mouse=X Hard(X)
Y Mouse=Y Hard(Y)
Rem **** ALMACENAMOS LAS COORDENADAS EN LA TABLA ****
Doke D,X : Doke D+2,Y : D=D+4
Next
End Proc |
| Volver menú revistas | Volver página anterior |