clone d'une instance (avec paramètres)

Par ksta, il y a 11 ans


Bonjour,

Je suis actuellement confronter à un problème sur un Objet javascript.
J'utilise Extends.js pour faire de l'héritage.

Mon problème :

J'ai un tableau multi qui possède plusieurs Objet (Objet Tile), pour remplir se tableau je récupère le Tile dans le Tileset correspondant puis je l'affect a sa position mais lorsque je change les positions cela modifie toute instance du Tile. J'ai beau regarder sur internet pour trouver une fonction clone() mais comme on Objet Tile doit avoir des propriété lors de sa construction cela ne marche pas :(.

Voici le code:

// parcour tous les tiles du layers for (var i = 0; i < this.data.length; i++) { if(x == tile_width){ y++; x = 0; } // si le tableau en y n'existe pas alors on le créer if(!this.mapData[y]){ this.mapData[y] = new Array(); } var tileMap = this.data[i]; // si il y a un tile if (tileMap !== 0 ) { // parcour tous les tilesets de la map utiliser dans les différents layers for (var t in p_tilesets) { // si le tileset contient le tile if (p_tilesets[t].isContainTile(tileMap)) { // récupère le Tile et ces différentes informations si il est dans le tilesets var tile = p_tilesets[t].getTileByIndex(tileMap); // si il est dans le tileset on l'insère if(tile instanceof Tile){ /*---------------------------------------- Mon problème : j'essaye de faire corresponde le x et y du Tile à la map ------------------------------------------*/ tile.setPosX(x * 32); tile.setPosY(y * 32); /* a la fin tous les Tile on comme position exemple: posX = 400 posY = 800 j'aimerais avoir : this.mapData[0][0] = y: 0 et x: 0 this.mapData[0][1] = y: 0 et x: 32 etc... */ this.mapData[y][x] = tile; break; } }; }; } // sinon c'est vide else{ this.mapData[y][x] = 0; } x++; };

voici ma class Tile :

var Tile = Rectangle.extend(function(tilset_infos){ /** * Nom du tile * @type {[type]} */ this.numero; /** * Nom du tile * @type {[type]} */ this.numTileset; /** * tileset du tile * @type {String} */ this.tileset; /** * properties du tile * @type {String} */ this.properties; this.constructor = function(tilset_infos) { this.super(tilset_infos); this.numero = tilset_infos.numero; this.numTileset = tilset_infos.numTileset; this.tileset = tilset_infos.tileset; this.properties = tilset_infos.properties; }; this.render = function(ctx){ var tile_width = this.tileset.tileWidth; var tile_height = this.tileset.tileHeight; var xSourceEnTiles = this.numTileset % this.tileset.image.width; if(xSourceEnTiles == 0) xSourceEnTiles = this.tileset.image.width; var ySourceEnTiles = Math.ceil(this.numTileset / this.tileset.image.width); var xSource = (xSourceEnTiles - 1) * 32; var ySource = (ySourceEnTiles - 1) * 32; ctx.drawImage(this.tileset.image, xSource, ySource, 32, 32, this.getPosX(), this.getPosY(), 32, 32); }; });

Si quelqu'un peut m'aider sur se problème je le remercie d'avance car j'aimerais éviter de faire new Tile() a chaque fois.

Aucune réponse