mehrdimensionale Arrays

Dac-XP

Erfahrenes Mitglied
Hi!

Habe noch ein Problem:
Der folgende Code führt zum darauf folgendem Ergebniss, was aber nicht sein sollte, wie man dem Code entnehmen kann. Warum das, und gibt es eine Lösung dafür?

Code:
Code:
for (x=0; x < 10; x++) {
	for (y=0; y < 10; y++) {
		_global.fields[x][y] = "0";
		trace(x+"/"+y+" = "+fields[x][y]);
	}
}

Ergebniss:
0/0 = 0
0/1 = 0
0/2 = 0
0/3 = 0
0/4 = 0
0/5 = 0
0/6 = 0
0/7 = 0
0/8 = 0
0/9 = 0
1/0 = 0
1/1 = 0
1/2 = 0
1/3 = 0
1/4 = 0
1/5 = 0
1/6 = 0
1/7 = 0
1/8 = 0
1/9 = 0
2/0 = undefined
2/1 = undefined
2/2 = undefined
2/3 = undefined
2/4 = undefined
2/5 = undefined
2/6 = undefined
2/7 = undefined
2/8 = undefined
2/9 = undefined
3/0 = undefined
3/1 = undefined
3/2 = undefined
3/3 = undefined
3/4 = undefined
3/5 = undefined
3/6 = undefined
3/7 = undefined
3/8 = undefined
3/9 = undefined
4/0 = undefined
4/1 = undefined
4/2 = undefined
4/3 = undefined
4/4 = undefined
4/5 = undefined
4/6 = undefined
4/7 = undefined
4/8 = undefined
4/9 = undefined
5/0 = undefined
5/1 = undefined
5/2 = undefined
5/3 = undefined
5/4 = undefined
5/5 = undefined
5/6 = undefined
5/7 = undefined
5/8 = undefined
5/9 = undefined
6/0 = undefined
6/1 = undefined
6/2 = undefined
6/3 = undefined
6/4 = undefined
6/5 = undefined
6/6 = undefined
6/7 = undefined
6/8 = undefined
6/9 = undefined
7/0 = undefined
7/1 = undefined
7/2 = undefined
7/3 = undefined
7/4 = undefined
7/5 = undefined
7/6 = undefined
7/7 = undefined
7/8 = undefined
7/9 = undefined
8/0 = undefined
8/1 = undefined
8/2 = undefined
8/3 = undefined
8/4 = undefined
8/5 = undefined
8/6 = undefined
8/7 = undefined
8/8 = undefined
8/9 = undefined
9/0 = undefined
9/1 = undefined
9/2 = undefined
9/3 = undefined
9/4 = undefined
9/5 = undefined
9/6 = undefined
9/7 = undefined
9/8 = undefined
9/9 = undefined
 
Hi,

Dein Code führt bei mir zu "undefined" in sämtlichen Elementen. Du musst sowohl "fields" als Array deklarieren, als auch jedes Element als weiteres Array:
Code:
_global.fields = new Array();

for (x=0; x < 10; x++) {
	for (y=0; y < 10; y++) {
		_global.fields[x] = new Array();
		_global.fields[x][y] = 0;
		trace(x+"/"+y+" = "+fields[x][y]);
	}
}

Gruß

P.S.: Warum setzt Du die Null in Anführungsstriche? Soll in den Elementen die Zeichenkette "0" oder der Wert 0 stehen?
.
 
Danke!

Also! Ich habe die Variable vorher schon deklariert, aber ein wenig anders. Nämlich so, wie es in der Hilfe von Flash steht.
Aber deine Methode funktioniert wenigstens.

Und das "0" war nur ein verzweifelter Versuch das Script ans Laufen zu bekommen :(

MfG Dac!;)
 
Tut mir leid, dass ich hier mit einem Doppelpost nerve, aber ich habe da noch ein Problem.

Wenn ich jetzt versuche von einem MovieClip auf die globale Variable "fields[][]" zuzugreifen, die ich vorher erstellt habe, dann funktioniert auch das wieder nicht. Wieder bekomme ich nur die "undefined"-Werte.

Code:
on (press) {
		var field_x = 1;
		var field_y = 2;
		trace (field_x+" / "+field_y);
		trace(_global.fields[field_x][field_y]);
}

Könnte mir da nochmal jemand helfen?

MfG Dac! ;)
 
Leider war es das auch nicht! Das ist immer noch das Gleiche.
Brauche also immer noch Hilfe! :(
 
Hi,

bei mir klappt das tadellos (siehe Anhang).

Hätte ich Einblick in Deine Datei, könnte ich sicher feststellen, wo der Fehler liegt.

Gruß
.
 

Anhänge

  • fields_button.zip
    5,1 KB · Aufrufe: 15
Klar kann ich dir die mal geben. Habe das _global aber wieder rein getan.
Bei dem Script für die Movieclipinstanz "h1ref" soll das Array ausgelesen werden.

//edit: Deine Datei kann ich nicht öffnen. Hast du eine Version höher als 7?
 
Zuletzt bearbeitet:
Hi,

Dein Fehler liegt in der Zuweisungsschleife:
Code:
for (x=0; x<10; x++) {
	for (y=0; y<10; y++) {
		fields[x] = new Array();
		fields[x][y] = 0;
		trace(x+"/"+y+" = "+fields[x][y]);
	}
}
Du musst die Zeile
Code:
fields[x] = new Array();
zwei Zeilen nach oben (ausserhalb des y-Schleife) verschieben. Im Moment löschst Du immer aufs neue alle vorherigen Zuweisungen. Beispiel:

x ist 0 und y auch:

fields[0] wird als neues Array initialisiert und dann fields[0][0] der Wert 0 zugewiesen.

Danach wird y um eins inkrementiert und Du löschst wieder das Array fields[0].

Dadurch kannst Du zwar fields[0][1] einen Wert zuweisen, aber fields[0][0] existiert nicht mehr. ;) Auf diese Weise bekommst Du immer nur einen Wert, wenn die y-Schleife komplett durchgelaufen ist und nur in fields[X][9] steht irgendwas.

Ausserdem solltest Du diese Berechnungen:
Code:
var field_x = (this._X-25)/50;
auf ganzzahlige Werte runden, da ein Array z.B. mit dem Index 10.021 nicht viel anfangen kann. ;)

Gruß
.
 
Super!
Ich danke dir vielmals! :)

Mit dem Runden haste Recht, auch wenn das eigentlich nicht möglich sein sollte, dass da krumme Werte raus kommen.
 
Zurück