2017-11-16 2 views
3

Mein Problem ist folgende:javascript Element des Arrays unveränderlich bleibt, auch nach Änderung Wert

diese Klasse Angenommen, es ist ein Beispiel für meinen wahren Code:

class TileMap { 
 
    constructor (w, h) { 
 
     this.tiles = []; 
 

 
     // init the matrix 
 
     for (var i = 0; i < h; i++) { 
 
      var a = []; 
 
      for (var j = 0; j < w; j++) { 
 
       a.push(0); 
 
      } 
 
      this.tiles[i] = a; 
 
     } 
 
    } 
 

 
    setTile (x, y, tile) { 
 
     this.tiles[y][x] = tile; 
 
    } 
 

 
    doSomething() { 
 
     this.setTile(0, 0, 1); 
 
     this.setTile(0, 1, 2); 
 
    } 
 
} 
 

 
// What's happening is when I use like this: 
 
var player = {}; 
 
player.map = new TileMap(32, 90, 90); 
 

 
player.map.doSomething(); 
 
console.log("before Tile[0][0] = " + player.map.tiles[0][0]); 
 

 
player.map.setTile(0, 0, 3); 
 
console.log("after Tile[0][0] = " + player.map.tiles[0][0]);

Zeigt mir der folgende Ausgang:

before Tile[0][0] = 1 
after Tile[0][0] = 1 

Die Matrix wird geändert, kehrt jedoch zu den Vorher-Werten zurück. Was soll ich tun? (HINWEIS Ich bin nicht vertraut mit Javascript aber mit Sprache wie C++)

+0

ich 'nach Tile [0] [0] = 3' Könnten Sie Ihren eigentlichen Code zeigen? – Thomas

+0

Funktioniert auch für mich – JonWells

+0

Ja, ich mache das vor, aber ich habe Funktion in der Klasse TileMap, die das Array direkt verändert und ich bekomme das gleiche Ergebnis: ändert und kehrt zum Original zurück. – samleo

Antwort

1

Ich verstehe nicht, was falsch ist. Ich habe Ihrem Code das Spielerobjekt hinzugefügt.

class TileMap{ 
 
    constructor (w, h){ 
 
    this.tiles = []; 
 
    //init the matrix 
 
    for (var i = 0; i < h; i++) 
 
    { 
 
     var a = []; 
 
     for (var j = 0; j < w; j++) 
 
     a.push(0); 
 
     this.tiles[i] = a; 
 
    } 
 
    } 
 

 
    setTile (x, y, tile){ 
 
    this.tiles[y][x] = tile; 
 
    } 
 

 
    doSomething(){ 
 
    this.setTile(0,0, 1); 
 
    this.setTile(0,1, 2); 
 
    } 
 
} 
 

 
//What's happening is when I use like this: 
 
var player = {}; 
 
player.map = new TileMap(32,90,90); 
 
player.map.doSomething(); 
 
console.log("before Tile[0][0] = "+player.map.tiles[0][0]); 
 
player.map.setTile(0,0, 3); 
 
console.log("after Tile[0][0] = "+player.map.tiles[0][0]);

+0

Sorry Mann, ich kann nicht die volle Quelle teilen, das war ein einfaches Beispiel und sollte perfekt funktionieren. Ich werde meinen Code überprüfen, sollte etwas sein, das ich nicht sehe ... aber danke – samleo

+0

Oh Mann, vielen Dank! Mit deinem kleinen Schnapper war ich motiviert, den gesamten Code zu überprüfen und funktioniert jetzt wie ein Zauber hehehe – samleo

+0

@samleo Kein Problem! – RensvWalstijn

Verwandte Themen