La clase SWFAction

(PHP 5 < 5.3.0, PECL ming SVN)

Introducción

SWFAction.

Sinopsis de la Clase

SWFAction {
/* Métodos */
__construct ( string $script )
}

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.

Tabla de contenidos