最近利用工做之余在研究了下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; }