Descripción
La sintaxis de script está basada en el lenguaje C, pero con mucho extraído- la
máquina de código de bytes de SWF es demasiado ingenua para hacer muchas cosas que nos gustaría.
Por ejemplo, no podemos implementar llamadas a funciones sin una enorme
cantidad de hackery ya que el código de bytes de salot tiene un valor de índice fuertemente
codificado. No se puede introducir sus direcciones de llamada a la pila y devolver-
cada función tendría que saber exactamente dónode devolver.
Entonces, ¿qué falta? El compilador reconoce los siguientes tokens:
-
break
-
for
-
continue
-
if
-
else
-
do
-
while
No existe información de tipo; todos los valores de la máquina de acciones de SWF están almacenados
como cadenas. Las siguientes funciones se pueden usar en expresiones:
-
time()
-
Devuelve el número de milisegundos (?) transcurridos desde el incio de la película.
-
random(seed)
-
Devuelve un número seudo-aleatorio en el rango de semilla 0.
-
length(expr)
-
Devuelve la longitud de la expresión dada.
-
int(number)
-
Devuelve el número dado redondeado hacia abajo al entero más cercano.
-
concat(expr, expr)
-
Devuelve la concatenación de las expresiones dadas.
-
ord(expr)
-
Devuelve el código ASCII del carácter dado
-
chr(num)
-
Devuelve el caráctar del código ASCII dado
-
substr(string, location, length)
-
Devuelve la subcadena de longitud
length
en la ubicación location
del
la cadena string
dada.
Además, se pueden usar los siguientes comandos:
-
duplicateClip(clip, name, depth)
-
Duplica el
clip
de película nominado (también conocido como sprite). El nuevo clip de película tiene el nombre de name
y profundidad de depth
.
-
removeClip(expr)
-
Elimina el clip de película nominado.
-
trace(expr)
-
Escribe la expresión dad la registro de rastreo. the given expression to the trace log. Dudoso ya
que el plugin del navegador no hace nada con esto.
-
startDrag(target, lock, [left, top, right, bottom])
-
Empieza a dibujar el clip de película
target
. El argumento
lock
indica si
bloquear el ratón (?)- use 0 (FALSE
) o 1 (TRUE
). Los parámetros opcionales
definen un área circundante para el dibujo.
-
stopDrag()
-
Deja de arrastrar mi corazón. Y este clip de película, también.
-
callFrame(expr)
-
Llama al fotograma nominado como una función.
-
getURL(url, target, [method])
-
Carga la URL dada en el objetivo nominado. El argumento
target
se corresponde con los objetivos del documento HTML (como "_top" or "_blank").
El argumento opcional method
puede ser POST o GET si se quieren enviar
variables al servidor.
-
loadMovie(url, target)
-
Carga la URL dada en el objetivo nominado. El argumento
target
puede ser un
nombre de fotograma (creo), o uno de los valores mágicos "_level0" (reemplaza
la película actual) o "_level1" (carga la nueva película encima de la película actual).
-
nextFrame()
-
Va al siguiente fotograma.
-
prevFrame()
-
Va al último (o, mejor dicho, al previo) fotograma.
-
play()
-
Inicia la reproducción de la película.
-
stop()
-
Detiene la reproducción de la película.
-
toggleQuality()
-
Conmuta entre alta y baja calidad.
-
stopSounds()
-
Detiene la reproducción de todos los sonidos.
-
gotoFrame(num)
-
Va al fotograma número
num
. Los números de fotograma empiezan en 0.
-
gotoFrame(name)
-
Va al fotograma llamado
name
. Que lo hace muy bien, ya que yo
no he añadido etiquetas de fotogramas todavía.
-
setTarget(expr)
-
Establece el contexto para la acción. O como se diga- No tengo ni idea
de los que hace.
Y hay una cosa rara extra. La expresión frameLoaded(num) se puede usar
en sentencias if y bucles while para verificar se el número de fotograma dado ya
ha sido cargado. Bien, se supone que sí, de todos modos, nunca lo he probado y
dudo seriamente que realmente funcione. En su lugar puede usar /:framesLoaded instead.
Los clips de película (ahora todos juntos- también llamados sprites) tienen propiedades. Se pueden
leer todos, establecer algunos de ellos, y aquí
están:
-
x
-
y
-
xScale
-
yScale
-
currentFrame - (solo lectura)
-
totalFrames - (solo lectura)
-
alpha - nivel de transparencia
-
visible - 1=on, 0=off (?)
-
width - (solo lectura)
-
height - (solo lectura)
-
rotation
-
target - (solo lectura) (???)
-
framesLoaded - (solo lectura)
-
name
-
dropTarget - (solo lectura) (???)
-
url - (solo lectura) (???)
-
highQuality - 1=high, 0=low (?)
-
focusRect - (???)
-
soundBufTime - (???)
Así, establecer la posición de un sprite es tan sencillo como
/box.x = 100;.
Aunque ¿por qué la barra al inicio de box? Así es como flash sigue
la pista de los sprites en la película, como un sistema de archivos Unix-
aquí muestra que box está en el nivel superior. Si el sprite llamado
box tiene otro sprite llamado biff dentro de él, se debería establecer su
position x con /box/biff.x = 100;. Al menos eso creo; corríjame
si me equivoco.