關於Cocosjs的TileMap動態添加障礙物的問題

最近利用工做之餘在研究了下CocosJs,今天恰好看到TileMap,發現了一個問題,我在代碼中沒法隨意添加圖片到固定的Cell中,這裏指的隨意圖片是在TileMap的圖集以外的圖片文件。this

但若是要添加在圖片集中的文件,那很是好作,用setTileGID便可,prototype

若是不是圖片集中的文件呢,並且要立刻就能產生碰撞效果的呢?code

個人解決方法是,重寫了TMXLayer 類中的方法-getTileGIDAt, 由於你在代碼中,是經過這個去獲取障礙物的,因此,你能夠將此方法添加一個參數,在裏面判斷,而後返回自定義的Cell類型就能夠了。圖片

 下面方法中的ida2a2,obsArray 是自定義的參數,obsArray表示的是我本身存放的Sprite類型的障礙物get

cc.TMXLayer.prototype.getTileGIDAt = function(pos,y,ida2a2,obsArray){
    if(pos == null)
        throw "cc.TMXLayer.getTileGIDAt(): pos should be non-null";
    if(y !== undefined)
        pos = cc.p(pos, y);
    if(pos.x >= this._layerSize.width || pos.y >= this._layerSize.height || pos.x < 0 || pos.y < 0)
        throw "cc.TMXLayer.getTileGIDAt(): invalid position";
    if(!this.tiles || !this._atlasIndexArray){
        cc.log("cc.TMXLayer.getTileGIDAt(): TMXLayer: the tiles map has been released");
        return null;
    }

    var idx = 0 | (pos.x + pos.y * this._layerSize.width);
    // Bits on the far end of the 32-bit global tile ID are used for tile flags
    var tile = this.tiles[idx];

    if(obsArray !== undefined && ida2a2 !== undefined){
        for(var i = 0,len = obsArray.length;i<len;i++){
            var obs = obsArray[i];
            if(pos.x == obs[0] && pos.y == obs[1]){
                tile = 99;
                break;
            }
        }
    }
    return (tile & cc.TMX_TILE_FLIPPED_MASK) >>> 0;
}
相關文章
相關標籤/搜索