sábado, 16 de mayo de 2009

Variables globales en AS3 (Action Script 3)

A mucho de vosotros os ha surgido en alguna ocasión la necesidad de trabajar con variables globales en AS3, pero... ¿dónde demonios se han metido? ahora resulta que el compilador no os deja utilizar la palabra reservada _global.
Eso es debido a un motivo nada esotérico, os lo prometo, resulta que Adobe (bueno antes Macromedia o lo que quede de ella) está empeñada en que ActionScript sea un lenguaje que cumpla los estándares de la OOP o la POO, que en cristiano significa Programación orientada a objetos.
No me voy a extender en explicar qué es eso, ya que corro el riesgo de repetir lo que ya han explicado millones de seres humanos, si tenéis curiosidad podéis daros un garbeo por aquí.

Lo importante es que vosotros queréis acceder a una variable desde cualquier parte de vuestra línea de tiempo para recuperar o modificar su valor, fale, aquí está la solución:

1. Solución elegante para fardar en los foros contestando a algún desesperado:

Abrimos Flash y creamos un nuevo documento as, en dicho documento hacemos copy paste de esto:




package
{
public class MisGlobales
{
public static var vars:Object = [];
}
}


Guardamos el archivo con nombre MisGlobales.as en la misma carpeta donde esté guardado el archivo .fla donde queremos utilizarla (se pueden referenciar las rutas hacia las clases as en las propiedades del proyecto pero para este ejemplo vamos a hacerlo así para no liar demasiado a los que se inician).

Una vez hecho esto escribis en la ventana de código del primer frame de vuestra película flash (primera escena-primer frame por coherencia o ¿no son globales lo que queréis?):

import MisGlobales;
MisGlobales.vars.root = this;

Después sólo tenéis que definir las variables allí donde os sean necesarias, dentro de vuestra películar, por ejemplo así:

import MisGlobales;
MisGlobales.vars.nombreCualquieraDeVariable = 999;
MisGlobales.vars.apellido = "Bejarano";

Por último, cuando queráis recuperar o cambiar el valor de esa variable sólo tenéis que llamarla.

trace("Compruebo que todo funciona bien, mi apellido es: "+MisGlobales.vars.apellidos);

Esto es todo amigos.


5 comentarios:

Ivancho dijo...

Excelente aporte, me sacaste de un problemononon gigante.....Muchas Gracias, Saludos desde Colombia

Rocio dijo...

Gracias acabas de arreglar mi vida jejeje

Dan dijo...

ME FUE DE GRAN AYDUA, GRACIAS

Unknown dijo...

alguien me podría compartir un ejemplo llevo 3 hrs y no eh podido, le agradezco.

Carlos Ariza dijo...

10 Años después y el tutorial sigue siendo full útil. La verdad, llevaba mas de un mes buscando solución a mi problema y tú lo has resuelto en unas cuantas lineas. Eres el Mejor.

Salu2