versiones ventajas programacion funciones ejemplos desventajas descargar flash actionscript-3 actionscript actionscript-2

ventajas - programacion actionscript en flash



¿Variables globales Flash AS3? (9)

testGlobal no es una variable global, es una variable de instancia pública de la clase Main . No puede acceder a él sin utilizar un objeto de clase Main , porque sin un objeto no existe para una propiedad. Las variables de instancia están ligadas a objetos.

Si desea acceder a crear una propiedad que no esté vinculada a ninguna instancia de objeto en particular, declare como static .

//Main.as package { public class Main { public static var testGlobal:string = "testValue"; } } //Pop.as package { public class Pop { function pop():void { trace("testGloabl from Main.as" + Main.testGlobal); } } }

HI tengo una clase principal

//main.as package { public class main { public var testGlobal:string = "testValue"; } } //pop.as package { public class pop { function pop():void { trace("testGloabl from main.as" + testGlobal); } } }

¿Cómo puedo obtener el valor testGlobal en pop.as ancho usando un objeto de clase principal. ¿Hay algún método de variables globales?

Cómo usar variables globales en AS3.


Puede usar la estática, como se dijo antes, o puede usar el patrón de Singleton. No hay constructores privados en AS, así que lo que puedes hacer es: a) tener mucho cuidado de no llamar al constructor b) enviar una excepción cada vez que alguien llame al constructor y la instancia ya se haya configurado.

No creo que haya variables globales reales, pero no veo por qué necesitarías ninguna. Si desea que una variable en la clase sea modificable desde el exterior simplemente declare que es estática, haga className.variableName =.


Estoy de acuerdo con lo que otros dijeron, evite las variables globales, prefiera las constantes (y, por lo general, las constantes no están pensadas para cambiar)


//main.as package { public class main { public var testGlobal:string = "testValue"; } } //pop.as package { public class pop { function pop():void { trace("testGlobal from main.as -- " + new main().testGlobal); // or var m : main = new main(); trace(m.testGlobal); } }


Simplemente haz esto desde cualquier nivel al que quieras llamar la línea de tiempo principal desde:

//Define your global variable var myGlobalVariable:String = "Get Up!"; //call it from anywhere var Root:MovieClip = root as MovieClip; trace(Root.myGlobalVar);

Eso debería funcionar en cualquier momento.


Simplemente haz esto desde cualquier nivel al que quieras llamar la línea de tiempo principal desde:

//Define your global variable var myGlobalVariable:String = "Get Up!"; //call it from anywhere var Root:MovieClip = root as MovieClip; trace(Root.myGlobalVar);

Eso debería funcionar en cualquier momento.

var i:int = 10000000; while(i--){ Root.nn--; }

23 veces más lento que:

var i:int = 10000000; while(i--){ globalVar.nn--; // package }


Puede usar la palabra clave _global ...

ej: un archivo llamado "_global.as" con este código:

public var _global:* = activateGlobals(); public function activateGlobals():*{ if(_global == null){ _global = this; } return _global; }

Luego puede probar _global como se indica a continuación en una clase, por ejemplo, "Main2.as" (diviértase):

package classes { import flash.display.Sprite; public class Main2 extends flash.display.Sprite{ include "_global.as"; var globalMethod:Function; var globalID; var globalValue:Number; var innerMethod:Function; var factorial:Function; var prototype = Main2.prototype; Main2.prototype.globalID = "globalIDprototype"; Main2.prototype.globalValue = Math.PI*2; public function Main2() { _global.factorial = function(n:Number) { if (n<=1) { return 1; } else { return n*_global.factorial(n-1); } } prototype.setPropertyIsEnumerable("globalID",true); _global.globalMethod = function(){ trace("Use of the _global method /"globalMethod()/""); } _global.globalID = "_global id"; _global.globalValue = Math.PI; _global.globalMethod(); // access properties : trace(_global.globalID); trace(_global.globalValue); trace(prototype.globalID); trace(prototype.globalValue); listValues(); getNameInInnerMethod(); _global.globalMethod(); getNameInInnerMethod(); } private function listValues():void{ for(var i in prototype){ trace(" - prototype[" + i + "] = " + prototype[i]); } for(i in _global){ trace(" - _global[" + i + "] = " + _global[i]); } i = null; // optionnal } private function getNameInInnerMethod():void{ _global.globalMethod = function(){ trace("this.name = " + this.name); trace("_global.name = " + _global.name); } function innerMethod():void{ trace("this.name = " + this.name); trace("_global.name = " + _global.name); // with global you have access to the name property from the inner method. } innerMethod(); } } }


Si definitivamente tiene que tener una variable global en as3, siempre puede crear un archivo en el nivel superior de su carpeta de origen de esta manera:

MULTIPLIER.as

package { public var MULTIPLIER:int = 3; }

Luego, cada vez que necesite su multiplicador, puede hacer referencia a donde lo necesite de esta manera:

DoSomeMultiplying.as

package multiplying { public class DoSomeMultiplying { public function multiplyMe(n:int):int { var m:int = n * MULTIPLIER; MULTIPLIER = m; return m; } } }

Sin embargo, recomiendo encarecidamente que no hagas esto. es una práctica terriblemente mala, terriblemente lenta y, ¡simplemente horrible !

Pero ahí está, es posible crear una variable o constante global en el paquete predeterminado para actuar como una constante o variable global.

Declarando funciones globales en AS3

Tenga en cuenta que también puede crear funciones globales de la misma manera, y no necesita usar una declaración de importación para (similar a la función de rastreo incorporada):

saludar.as

package { public function greet():String { return "Hello World" } }

Similar a la variable global, esta función global es accesible desde cualquier lugar sin una declaración de importación:

package bar { public class foo { public function foo():void { trace("New foo says: "+greet()+", no import necessary"); // New foo says: Hello World, no import necessary } } }


Tal vez puedas colocar var testGlobal:string = "testValue"; en el cuadro 1