Sep 19, 2008

Recogiendo variables externas

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:

[as3]var variableA:String = this.loaderInfo.parameters.textoA[/as3]

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.

Información del artículo

Post publicado el 19 de September de 2008 a las 19:49 por llops

Categorias: Tips

Etiquetas: , , , ,

Comparte

4 comentarios

  • asdmaster

    Habia buscado y no encontraba la solucion asi que gracias por este tip muy bien explicado…

  • Pues funciona perfecto pero, son variables predefinidas, en mi caso tendria que usar un archivo php desde el cual leer las variables, algo asi:

    echo “&dato2=Al Aire “.$shoutcast->AlgunDato1().””;
    echo “&dato1=Titulo “.$shoutcast->AlgunDato2().””;

    cuyos valores se actualizan cada cierto tiempo.

    como llamarias a eso en as3?

    Aqui la llamada en as2

    function cargar_datos_php()
    {
    mostrar.text = “recibiendo datos…”;
    enviar = new LoadVars();
    enviar.sendAndLoad(“mostrar.php”, enviar, “POST”);
    enviar.onLoad = function ()
    {
    mostrar.text = this.dato1;
    mostrar1.text = this.dato2;
    };
    } // End of the function
    cadamilisegundos = 20000;
    setInterval(cargar_datos_php, cadamilisegundos);

    Espero puedas ayudarme.

    Saludos.

  • Jose

    Aún necesitas ayuda? Es algo sencillo!!!

  • Bert

    Buenas.
    ¿y si el archivo que recoge los parámetros es un exe y no podemos utilizar js ni html?

    Yo no doy con la solución.