LLops Blog

Blog de programación creativa mantenido por llops. Experimentos y artículos entorno a la plataforma flash y as3.

Sep 19, 2008

A pesar de tener poco cero tiempo para dedicarle al blog, no quería dejar de escribir este pequeño tip sobre como se recogen variables externas en AS3. No es que sea nada muy complejo (la verdad es que incluso en la ayuda se comenta), pero me resultó curioso cuando el otro día un compañero me preguntó si lo sabía y me di cuenta que en todo este tiempo tocando AS3 no había tenido necesidad de usarlo... Así que lo documento por si existe por ahí algún despistado como yo :)

Haciendo un poco de memoria, en versiones anteriores se podía acceder a las variables directamente en el  _root (_root.miVariable). Ahora es bastante menos intuitivo, aunque no carece de lógica.

En AS3 se utiliza la clase Loader cuando queremos cargar un swf o una imagen, y su propiedad contentLoaderInfo para acceder a la información del fichero y al proceso de carga (bytesLoaded, etc). Dicha propiedad es en realidad una instancia de la clase LoaderInfo. Así pues, al buscar cualquier información referente al swf, tiene sentido hacerlo en dicha clase, y las variables externas no son una excepción. Por esa razón existe una propiedad llamada parameters, de tipo Object para almacenar pares de nombre-valor.

Y la pregunta evidente es: si el primer swf no está cargado mediante Loader, ¿cómo acceder a esta información? La respuesta consiste en que cualquier objeto de la Display List cuenta con una propiedad loaderInfo que provee la información del SWF principal.

En este punto, si quisiéramos acceder a una variable llamada textoA sabemos que podemos hacerlo de la siguiente forma:

  1. var variableA:String = this.loaderInfo.parameters.textoA

donde this puede ser tanto el DocumentClass como cualquier frame del timeline.

Y un par de consideraciones:

  • Debemos asegurarnos que al acceder a loaderInfo en un objeto, además de ser del tipo Display, éste se encuentre en la Display List, ya que sino generará error.
  • Sino se conocen el número de variables a recibir, podemos usar un for..in sobre parameters para que nos muestre todos los valores, ya que es un Object.

Dejo un ejemplo que utiliza swfobject 2.1 para cargar un swf y pasarle 2 variables que se muestran en cajas de texto:
Descargar ejemplo.

Posted in Tips 0

LLops en Twitter

Lo más visto del Lab

Top