Comunidad de diseño web y desarrollo en internet online

Array bidimensional

Citar            
MensajeEscrito el 08 Sep 2011 03:30 pm
Seguramente esto es una chorrada de pregunta, pero llevo 1h calentándome la cabeza y buscando en google (igual no lo busco bien) pero no se como c*** declarar un array de varias dimensiones en actionscript

Se que en C por ejemplo pones

Código C++ :

int nombre[tamaño1][tamaño2]


En as cuando declaras un Array pones

Código ActionScript :

var MiArray:Array = new Array()

y entre paréntesis el número de elementos que tiene el array (opcional), pero ¿y si quiero una matriz? ¿como la declaro?

PD: Lo que pretendo hacer es una matriz de nxn Tiles para un juego y guardar una referencia a la clase Tile en cada una de las posiciones de la matriz

Por Cagarnera

Claber

158 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Sep 2011 03:42 pm
Ejemplo simple

var miArray = [[],[],[]]

Array vacío con tres filas. A diferencia de C o C++ donde los arrays deben declarar la cantidad de elementos que tendrán, aquí son dinámicos, es decir le vas agregando elementos. Si son del mismo tipo y sabes cuanto quieres que ocupe, mirate la clase Vector

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Sep 2011 04:53 pm
Esa forma de declarar el Array no me vale. Lo que quiero es declarar el Array con un tamaño "fijo" (que le pasaré al constructor de la clase) y después ir creando las instancias de cada Tile

He estado mirando la clase Vector y creo que puede ser lo que necesite, pero no acabo de entender como crearlos bidimensionales.

¿Sería algo así?

MyVec:Vector.<Vector> = new Vector.<Vector>(tamaño1)

¿y después que? ¿como especifico la otra dimensión?


Con lo sencillo que es hacer esto en otros lenguages

Por Cagarnera

Claber

158 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Sep 2011 05:21 pm
Sería así

Código ActionScript :

var miArray:Array = new Array(2);
myArray[0] = new Array(3);
myArray[1] = new Array(3);


El lenguaje mas sencillo es el que uno conoce ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Sep 2011 06:27 pm
Bueno, no es exactamente lo que quiero. Buscando un poco más he encontrado esta clase:
http://www.cristalab.com/tutoriales/clase-de-actionscript-3-para-arrays-multidimensionales-c42262l/

Que me sirve justo para lo que quiero, primero creo un Array de filas y después meto la fila. Ya se que es justo lo que me acabas de poner tu, pero tenía la cabeza hecha un lío y ya tengo muchas líneas escritas con esta clase y es un pateo cambiarlo

Por Cagarnera

Claber

158 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Sep 2011 08:46 pm
A ver si encuentras el porqué pasa esto. He probado ha hacerlo con la clase Array, por eso de ser cabezota y querer sacarlo como lo tenía pensado

Código :

         for(i=0;i<10;i++){
            for(j=0;j<10;j++){
               A[j]=new Tile("prueba",i,j)
               A[j].num.text = ""+i+","+j
               //trace(A[j].getPos()+" "+j)
               this.addChild(A[j])
               
            }
            
            Tiles.push(A)
         }


Este es el código que uso para ir "creando" el array. Todo ok, consigo un Array bidimensional de 10x10 y no da ningún error al compilar. Pero no se porque cuando hago el push machaca lo que tenía y todas las filas se me quedan iguales. ¿Que hago mal? No lo entiendo :twisted:

Cuando hago:

Código ActionScript :

         for(i=0;i<10;i++){
            for(j=0;j<10;j++){
               trace(Tiles[i][j].getPos())
            }
            trace("--------")
         }

Para que me muestre el índice de los tiles, todas las filas de la matriz son iguales.



La clase Tile no creo creo que tenga el fallo, ya que los pinta correctamente y le he puesto un TextField para que me muestre los índices de cada Tile y todo Ok, pero ya no estoy seguro ni de eso

Por Cagarnera

Claber

158 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Sep 2011 08:58 pm
Vale lo acabo de resolver. El problema reside en como AS maneja los Arrays (temas de punteros y todos esos rollos, suerte que aprendí C :D ) La cosa es que al cambiar el Array "A" flash escribe en las mismas direcciones de memoria, por eso sobreescribe también mi Array "Tiles"

Maldito AS :twisted: :twisted: :twisted: :twisted: Esas cosas se avisan!!! Que me ha costado 3h descubrirlo :twisted: :twisted: :twisted: :twisted:

Por Cagarnera

Claber

158 de clabLevel



 

firefox

 

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