Bonjour,
Je suis actuellement confronter à un problème sur un Objet javascript.
J'utilise Extends.js pour faire de l'héritage.
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.