2009-12-26 2 views
0

Je semble avoir un problème de portée de tableau. J'ai une variable globale;Actionscript 3 tableau array/multidimentional questions de tableau

var itemConnect:Array = new Array(); 

Qui est initialisé au début. J'ai alors une fonction pour le remplir comme un tableau 2-d:

// Draw connections 
function initConnections() { 
for (var i:Number = 0; i < anotherArray.length; i++) { 
    for (var j:Number = 0; j < anotherArray[i].length; j++) { 
    itemConnect[i] = new Array(); 
    itemConnect[i][j] = new Shape(); 
    } 
} 
} 

La structure de données ressemble à quelque chose comme:

CREATE: i = 0, j = 1, val = [object Shape] 
CREATE: i = 0, j = 14, val = [object Shape] 
CREATE: i = 1, j = 2, val = [object Shape] 
CREATE: i = 1, j = 3, val = [object Shape] 
CREATE: i = 1, j = 4, val = [object Shape] 
CREATE: i = 1, j = 5, val = [object Shape] 
CREATE: i = 1, j = 6, val = [object Shape] 
... 

Si je tente d'accéder à ce tableau dans une autre fonction, je viens obtenir ceci:

i = 0, j = 14, val = [object Shape] 
i = 1, j = 51, val = [object Shape] 
TypeError: Error #1010: A term is undefined and has no properties. 
at main_fla::MainTimeline/mouseDownHandler() 

I essayé d'initialiser le tableau au début comme une matrice 2-D comme suit:

var itemConnect:Array = new Array(); 
for (var counti = 0; counti < anotherArray.length; counti++) { 
itemConnect[counti] = new Array(); 
} 

qui produit des résultats légèrement meilleurs, mais manque encore beaucoup des nœuds:

i = 0, j = 14, val = [object Shape] 
i = 1, j = 51, val = [object Shape] 
i = 3, j = 47, val = [object Shape] 
i = 6, j = 42, val = [object Shape] 
i = 7, j = 42, val = [object Shape] 
i = 8, j = 45, val = [object Shape] 
i = 9, j = 42, val = [object Shape] 
... 

Il semble avoir accès portée à un seul de chacun des [i] noeuds, donc [1] [2], [1] [3], [1] [4] manquent - seul le dernier élément [j] apparaît.

Quelle est la bonne façon de procéder? Je ne connais pas non plus la taille exacte du tableau au début, ce qui peut être un problème.

Merci

Répondre

0

Votre boucle imbriquée ne doit-elle pas ressembler à ceci?

function initConnections() { 
    for (var i:Number = 0; i < anotherArray.length; i++) { 
     itemConnect[i] = new Array(); 
     for (var j:Number = 0; j < anotherArray[i].length; j++) { 
      itemConnect[i][j] = new Shape(); 
     } 
    } 
} 

Notez que dans cette version la construction du réseau interne se passe en dehors de la boucle qui est destiné à être itérer il.

+0

Oui; C'est vraiment un problème. Dans votre code, vous créez le nouveau tableau [i] i * j fois - pas ce que vous voulez. – Dirk

Questions connexes