Comunidad de diseño web y desarrollo en internet online

Array dinámico global en AS3?

Citar            
MensajeEscrito el 26 Ene 2010 11:26 am
Llevo tiempo intentando sacar esto a delante y no soy capaz. Necesito recojer del usuario una serie de valores e introducirlos en un array al que pueda acceder desde toda la aplicación (Trabajando en Flash cs4, no en flex). El tema es que me he encontrado googleando con que jahepi recomienda lo siguiente:

Código ActionScript :

package {
    
    dynamic public class MyObject {
        
        
        private static var _self:MyObject
        
        
        public function MyObject(lock:Lock) {
        }
        
        public static function getInstance():MyObject {
            if(_self == null) {
                _self = new MyObject(new Lock());
            }
            return _self;
        }
        
    }
}

class Lock {}  

efectivamente, esto crea una array global.. pero no diggamos exactamente dinámica ya que una vez utilizas global.loqsea = {c1:"loqusea"}, si luego intentas global.loqsea={c2:"loqsea"}, as3 genera un error.
La solución a esto sería poner
global.loqsea = {c1:x, c2:y}. Posteriormente, si te deja tratarlos de forma individual. el problema de esta solución es que entonces estamos tratando con una matriz no dinámica. No puedo preveer la cantidad de datos que me va a introducir el usuario, por lo que no puedo tener una matriz creada de antemano y no se como podría introducirle los datos desde un bucle for...
¿Algun aidea? Muchas gracias por adelantado

Por xeyos

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Ene 2010 12:17 pm
Lo que muestras es la creación de un singleton genérico, no necesariamente tiene que ver con lo global sino con que es la forma en que se suelen instanciar los modelos de datos para asegurarse que no haya inconsistencias. De todas formas en AS los arrays son dinámicos, es decir pueden tener cualquier tipo de datos y tamaño, por lo que en principio eso no es un problema

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Feb 2010 03:32 pm
En base a tu respuesta he replanteado el asundo y me he hecho la siguiente clase:

Código ActionScript :

package clases.globales
{
   public class ClasePrueba
   {
      public static var listaCasillas:Array;
      function ClasePrueba()
                {
         listaCasillas = new Array();
      }
   }
} 

luego la llamo en el flash
import clases.globales.ClasePrueba;
ClasePrueba.listaCasillas[0] = "azul";

y le flash genera un error. ¿Sería esta la solución correcta en AS3 para utilizar un array global? Personalmente me parece un poco confuso todo este tema U_u supongo que es cuestión de acostumbrarse. Gracias por la respuesta!

Por xeyos

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Feb 2010 03:36 pm
No, para asegurar la consistencia debería ser un Singleton, que es lo que hace el primer ejemplo que pusiste

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Feb 2010 09:30 am
entonces no podría utilizarlo como dinámico ya que la 1ª vez que lo llamo debería inicializarle todos los campos que voy a utilizar y vuelvo a estar en el problema incial. ¿alguna solución o referencia donde pueda continuar con mi documentación?

Por xeyos

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Feb 2010 12:18 pm
En AS un array es dinamico siempre, no hay que declarar que cantidad de elementos ni de que tipo son, ¿a que te refieres con dinámico?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Feb 2010 12:27 pm
a lo que comento en el 1º post. Utilizando el patrón singleton no puedo darle un valor directamente a 2 posiciones del array. Te pongo el ejemplo.
Si hago esto
global.loqsea = {c1:"loqusea"}
Funciona correctamente.
si hago esto:
global.loqsea = {c1:"loqusea"}
global.loqsea={c2:"loqsea"}
da un error, porque nopuedo meterle más de una posición al array.
sin embargo si hago esto:
global.loqsea = {c1:x, c2:y}
luego me deja tratar cada valor independientemente así:
global.loqsea = {c1:"loqusea"}
global.loqsea={c2:"loqsea"}
Es decir, parece que la primera vez que llamo al array le define una determinada cantidad de posiciones segun el contenido que le meta, lo que hace qu eel array no sea dinámico :s

No se si consigo reflejar el problema. Muchas gracias por la respuesta, como siempre ;)

Por xeyos

10 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Feb 2010 12:38 pm
Si haces esto:

global.loqsea = {c1:"loqusea"}

Estás definiendo un objeto (no un array)

Si haces esto

lobal.loqsea={c2:"loqsea"}

Lo estás sobreescribiendo, no agregas ni al objeto y menos a un array.

Un Singleton define una única instancia que es compartida por muchos miembros, pero ve de a poco, si mezclas errores básicos con conceptos grandes solo lograrás confundirte.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.