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