Matti Mäkitalo: Array in Array - kein Objekt ?

Hallo Community

ich hab ein Problem mit einem kleinen JavaScript - Spielchen, was ich momentan (testweise) schreibe. (Bin immer noch dabei, JavaScript zu verstehen - werd es wohl NIE packen 8-))

Also, das Spiel ist Memory. Ich baue das Spielfeld auf und ordne dabei jedem Feld ein Bild zu, wobei ein Bild höchstens zwei Mal benutzt werden kann. Dies wird in der Variablen Feld[] gespeichert, die Bilderquellen sind in der Variable Bild[].
Soweit funktioniert alles. Jetzt rufe ich meine Funktion 'aufdecken' auf, der ich als Parameter die 'Koordinate' des Bildes mitgehe. Die Koordinaten laufen durchgehend von 0 bis 15, für 16 Felder (ich fang mal klein an).
Zum mitdenken: Hier die Funktion aufdecken:

function aufdecken(welches){
   document.images[welches].src = Bild[Feld[welches]].src;    
   offencoor[offen] = welches;
   offen++;
   if (offen >= 2) {
pruefe(offencoor[0], offencoor[1]);
   }
}

welches ist die Koordinate des Bildes. offen ist von Beginn an mit dem Wert 0 belegt und zählt die Anzahl der offenen Karten durch. In der Variablen offencoor speichere ich nun die  Koordinaten der aufgedeckten Felder.
Jetzt kommt mein Problem: Der IE (zu Test- und Übungszwecken probier ichs erstmal für den und nicht für Netsie) sagt mir dann, dass die Zeile

document.images[welches].src = Bild[Feld[welches]].src;

kein Objekt wäre. Aber die Arrays Bild[] und Feld[] werden korrekt 'bestückt'. Wie gesagt, in Feld ist der Name des Bildes gespeichert. In Bild sind die Namen der Bilder  "0.jpg" bis "7.jpg". Wo ist da der Fehler? Kann ich die Arrays nicht ineinander aufrufen?

Tschau Matti
*der sich riiieesig morgen auf Berlin freut*

  1. Hallo Matti,

    Jetzt kommt mein Problem: Der IE (zu Test- und Übungszwecken probier
    ichs erstmal für den und nicht für Netsie)

    Solange du nur <script> machst ist der Netscape IMHO sogar besser.
    Aber sobald es ans Anzeigen(rendern) geht :(

    [...] sagt mir dann, dass die Zeile

    »»    document.images[welches].src = Bild[Feld[welches]].src;

    kein Objekt wäre.

    Sieht super aus - also: Aufdröseln und alles einzeln prüfen:

    if(welches<0 welches >15)
      alert ("welches enthält blödsinn:"+welches);
    if(Feld[welches]<0 Feld[welches] >7)
      alert ("Feld[welches] enthält blödsinn:"+Feld[welches]);

    hilf=Bild[Feld[welches]].src;

    if(typeof(hilf)!="string")
       alert("Bild nicht (richtig) definiert");

    jaja ich weiss... keine ganzen Scripte posten.. ist dafür auch extra
    ungetestet und ausserdem musst du ja bald fertig werden, damit du fit
    bist für:

    *der sich riiieesig morgen auf Berlin freut*

    Viel Spass!

    Gruss,
    Carsten

  2. Hallo auch,

    Also, das Spiel ist Memory. Ich baue das Spielfeld auf und ordne
    dabei jedem Feld ein Bild zu, wobei ein Bild höchstens zwei Mal
    benutzt werden kann. Dies wird in der Variablen Feld[]
    gespeichert, die Bilderquellen sind in der Variable Bild[].

    Also lass mich mal wiederholen: Feld[] hat 16 Einträge, in denen die
    Namen die du im IMG Tag vergeben hast drinnen stehen, und in Bild[]
    steht die Pfadangabe zu jedem der 16 Bilder?

    Wieso machst du das eigentlich nicht so:

    function aufdecken(welches){
       aktiv = Feld[welches];
       document.images[welches].src = Bild[aktiv].src;    
       offencoor[offen] = welches;
       offen++;
       if (offen >= 2) {
          pruefe(offencoor[0], offencoor[1]);
      }
    }

    Wie hast du eigentlich Bild[] definiert. Jedes einzeln :

    Bild[0] = new Image()
    Bild[0].src = "00.jpg"
    ... usw.

    ansonsten wird sich der Browser schwer tun mit Bild[].src, da kein
    Image-Objekt!

    Wenn das dein Problem war, hoffe ich dir geholfen zu haben,
    ansonsten: Muss leider gestehen, beim Rest bin ich ausgestiegen :-(

    Schöne Grüsse,
    Bernhard

  3. Hi
    Stell das ganze mal online, dann kann man das leichter Testen und auch den Fehler finden!
    Damit der Quelltext funktioniert muss:
    1. Feld[x] jeweils irgendeine Zahl zwischen 0 und 7 sein
    2 Bild so definiert sein, wie Bernhard das geschrieben hat.
    Bild[0] = new Image()
    Bild[0].src = "00.jpg";
    ...

    Tschau Holger