2 dimendionales Array - problem mit Abfrage.

NetPerformance

Erfahrenes Mitglied
Hallo,

habe ein array Problem.
2 dimensionales Array.
Das array hat 60 Felder. In alle Felder habe ich mc´s eingebunden. Soweit alles ok .. die mc´s werden auf der Bühne auch angezeigt.

Code:
for (i=0; i<6; i++) 
{
	for (j=0; j<10; j++) 
	{
		feld[i][j] = this.createEmptyMovieClip("sammlung", counter);
		feld[i][j] = sammlung.attachMovie("animation_mc", "gegner"+counter, counter);

		counter++;
	}
}

Die mc´s sind Gegner. Ich kann sie auch abschiessen. Dadurch werden die mc´s an der stelle durch removeMovieClip entfernt.

Meine Frage:
Wie kann ich feststellen, welche Gegner bzw. Felder entfernt wurden ?

Code:
for (i=0; i<6; i++) 
{
	for (j=0; j<10; j++) 
	{
		if(_root.feld[i][j]==undefined)
		{
			trace("leer");
		}
	}
}

habe viele Varianten geteste:
Code:
if(_root.feld[i][j]=="undefined")
if(_root.feld[i][j]==null)
if(_root.feld[i][j]=="null")
if(_root.feld[i][j]==0)

Gruß
Aaron *der nicht aufgibt, bis das Spiel fertig ist" :)
 
Was gibt denn
PHP:
trace(_root.feld[i][j]);
aus, wenn der Clip gelöscht wurde? ;)

Ansonsten: Über eine Abfrage der Maße sollte es gehen:
PHP:
f(_root.feld[i][j]._width == 0)
... oder über eine andere beliebige MovieClip-spezifische Eigenschaft (_name, getDepth() usw.).

Gruß
.
 
Das war klar..
Vielleicht habe ich das Problem falsch erklärt.
Code:
if(_root.feld[i][j]==undefined)

oder
Code:
(_root.feld[i][j]._width == 0)


gibt von anfang an für alle Felder undefined aus !
Und genau das verstehe ich nicht. Sobald das Spiel startet.. also bevor ich irgendwelche Felder leer geschossen habe, werden alle array-Felder als undefined ausgegeben.

Eigentlich sollen nur die leeren Felder d.h. die toten Gegner als undefined erkannt werden.

Gruß
Aaron
 
Achso:

Warum versuchst Du eigentlich, das Array doppelt zu füllen? Probier mal das:
PHP:
var sammlung  = this.createEmptyMovieClip("sammlung", counter);
feld[i][j] = sammlung.attachMovie("animation_mc", "gegner" + counter, 1);
Warum müssen die "animation_mc"s eigentlich noch jeweils in einen leeren Clip gesteckt werden?

Weitere mögliche Gründe, warum Dein Array "undefined" zurückgibt:
  • feld wurde als lokale Variable deklariert
  • feld wurde nicht als Array dekklariert ( var feld = new Array() )
  • feld[x] wurde nicht als Array deklariert ( feld[i] = new Array() )

Ansonsten: Poste die Datei, dann kann ich es Dir genau sagen. ;)

Gruß
.
 
Hi
Die Deklaration sollte stimmen.
Anbei die Datei.

Die Gegner werden in das leere Clip geladen und darüber gesteuert.

Die arra-Abfrage benötige ich, weil:

wenn der äußere Rand anbeschossen wird, sollen sich die restlichen Gegner weiter nach rechts bzw. links bewegen.

Ich wollte feststellen, ob der komplette linke rand getötet wurde.

AS liegt auf _root.

Dank im vorraus.
Aaron
 

Anhänge

  • 5.zip
    17 KB · Aufrufe: 15
fällt Dir was auf?
PHP:
feld[0] = new Array();
Damit gibst Du bloß dem Element mit dem Index 0 eine zweite Dimension... Du musst aber jedes einzelne Element als neues Array deklarieren:
PHP:
for (i=0; i<6; i++) 
{
	for (j=0; j<10; j++) 
	{
		if (i == 0 || i == 1) 
		{
			feld[i] = new Array();
			var test = this.createEmptyMovieClip("sammlung", counter);
			feld[i][j] = test.attachMovie("30_mc", "gegner"+counter, counter);
...
Ich meine übrigens immernoch, dass es ziemlich sinnlos ist, 60 Sammlung-MCs zu erstellen... attache Deine Gegner einfach auf _root und gut. ;)

Gruß

P.S.: Wenn Du die Dinger schon in einem Array hast, warum verwendest Du es dann nicht auch gleich? Spart einige Tipparbeit:
PHP:
feld[i][j]._x = 45 + (counter * feld[i][j]._width*2.25);

P.P.S.: Space Invaders: Cool! ;)
.
 
Zuletzt bearbeitet:
sorry... mir fällt imom nix auf.. stehe warscheinlich auf dem schlauch :)

Hierdurch habe ich doch für feld 2 dimensionen definiert.. oder ?!

feld = new Array();
feld[0] = new Array();


Gruß
Aaron

p.s.: space invaders ist super cool :)
 
Nein.

Dadurch bekommst Du ein Array, in dem das erste Element ebenfalls ein Array ist - die anderen Elemente aber nicht:
Code:
feld: x  x  x  x  x  x  x  x  x ...
      x
      x
      x
      x
      x
      .
      .
Um ein "vollständiges" 2-dimensionales Array zu bekommen, musst Du jedes Feld des 1-dimensionalen Arrays als neues Array definieren:
PHP:
for (var i=0; i<x_laenge; i++) {
    feld[i] = new Array();
}
Dann erhälst Du so etwas:
Code:
feld: x  x  x  x  x  x  x  x  x ...
      x  x  x  x  x  x  x  x  x ...
      x  x  x  x  x  x  x  x  x ...
      x  x  x  x  x  x  x  x  x ...
      x  x  x  x  x  x  x  x  x ...
      x  x  x  x  x  x  x  x  x ...
      .  .  .  .  .  .  .  .  . ...
      .  .  .  .  .  .  .  .  . ...

Gruß
.
 
@Datic: Muss dich darum bitte, mir das Array zu schreiben ... sitze seid deine letzte Posting an der Geschichte und komme nicht weiter :/

Also.. *aufdieknieangekrochen* schreib mir bitte das ***** array um :)

Gruß
Aaron
 
;) .. hab ich doch schon zwei Postings weiter oben:
PHP:
for (i=0; i<6; i++)
{
    for (j=0; j<10; j++)
    {
        if (i == 0 || i == 1)
        {
            feld[i] = new Array();
            var test = this.createEmptyMovieClip("sammlung", counter);
            feld[i][j] = test.attachMovie("30_mc", "gegner"+counter, counter);
...
Einfach jenes "feld[i] = new Array()" vor der Zuweisung, und es geht.

Gruß
.
 

Neue Beiträge

Zurück