Les tableaux 2D en ActionScript 3

Je vous propose aujourd’hui de faire un petit point sur l’utilisation des Array (les tableaux) à 2 (et plus) dimensions en ActionScript 3. Je me suis en fait retrouvé face à ce problème lorsque j’ai voulu utiliser un tableau 2D pour stocker le contenu d’une carte de jeu chargée depuis un fichier XML. Mon fichier XML ressemblait à quelque chose comme ça :

  
    0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E 0x3E
    0x3E 0x45 0x45 0x45 0x45 0x3F 0x45 0x45 0x45 0x45 0x46 0x45 0x45 0x45 0x45 0x45 0x45 0x45 0x45 0x3E
    0x3E 0x45 0x45 0x45 0x45 0x3F 0x45 0x45 0x45 0x45 0x45 0x45 0x45 0x45 0x45 0x45 0x45 0x45 0x45 0x3E
    
  
Et donc concrètement je voulais pouvoir stocker tout ce petit monde dans un tableau en 2D afin de le réutiliser dans ma boucle de rendu. Un nœud <dim> correspond au contenu d’une dimension qui elle même est un tableau de uint (unsigned int).

Les tableaux simples

Utiliser des tableaux en ActionScript 3 est chose facile, une déclaration de variable de type Array avec ou sans paramètre pour la taille et le tour est joué. Ainsi la déclaration suivante va créer un tableau  de 5 cases à une dimension :
var monTableau:Array = new Array(5);// Ou même
var monTableau2:Array = new Array();// Ensuite on l'utilise comme on veux
monTableau[0] = 23;monTableau["Hello"] = 45;
On peut aussi créer statiquement un tableau sans spécifier de taille et en ajoutant directement les données désirées :
var monTableau:Array = ["Bonjour", "vous êtes", "sur mon blog", 3.14, 45, "Bye"];
Maintenant que nous avons vue les deux méthodes pour créer des tableaux à une dimension, voyons ce que cela donne quand nous voulons utiliser d’autres dimensions.

Les tableaux à 2 dimensions (et plus)

On peut créer statiquement un tableau à plusieurs dimensions sans problèmes, voyez l’exemple suivant pour un tableau à 2 dimensions et ensuite un tableau à 3 dimensions :
var matrice:Array = [  [1, 0, 0, 0],  [0, 1, 0, 0],  [0, 0, 1, 0],  [0, 0, 0, 1]];
var tab3D:Array = [  [      [1, 2, 3, 4],      [5, 6, 7, 8]  ],  [      [1, 2, 3, 4],      [5, 6, 7, 8]  ],  // etc...];
Vous pouvez facilement accéder aux éléments de la façon suivante :
var sizeX:int = matrice.length;
var sizeY:int = matrice[0].length;

for (var i:int = 0; i < sizeX; i++)
{
    for (var j:int = 0; j < sizeY; j++)
    {
         trace(matrice[i][j]);
    }
}
Maintenant la question est de savoir comment créer statiquement ce type de structure ? On ne peux pas écrire directement quelque chose comme ça :
var tab:Array = new Array();tab[0][0] = 45; // dimension 2 non définie
La solution est toute simple pourtant !
var tab:Array = new Array(10);
var size:int = tab.length; // 10

for (var i:int = 0; i < size; i++)
{
    tab[i] = new Array(10); // Chaque ligne est un Array
}
Finalement pour un tableau à 3 dimensions on fonctionnera de la même façon 🙂 Les étapes pour créer un tableau à plusieurs dimensions sont donc les suivantes :
  1. Création de la variable tableau (avec ou sans taille, c’est automatique)
  2. Boucle sur le tableau et pour chaque ligne créer un nouveau tableau avec une taille donnée (ou pas)

J’espère que ce petit article vous aidera à y voir plus clair sur l’utilisation des Array multidimensionnel en ActionbScript 3. Je publierais bientôt de nouveaux articles sur ActionScript 3, en particulier sur la lib Flixel et peut être As3IsoLib. En attendant stay tuned.