关于Cocosjs的TileMap动态添加障碍物的问题

最近利用工作之余在研究了下CocosJs,今天刚好看到TileMap,发现了一个问题,我在代码中无法随意添加图片到固定的Cell中,这里指的随意图片是在TileMap的图集之外的图片文件。

但如果要添加在图片集中的文件,那非常好做,用setTileGID即可,

如果不是图片集中的文件呢,而且要马上就能产生碰撞效果的呢?

我的解决方法是,重写了TMXLayer 类中的方法-getTileGIDAt, 因为你在代码中,是通过这个去获取障碍物的,所以,你可以将此方法添加一个参数,在里面判断,然后返回自定义的Cell类型就可以了。

 下面方法中的ida2a2,obsArray 是自定义的参数,obsArray表示的是我自己存放的Sprite类型的障碍物

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;
}


转载于:https://my.oschina.net/u/2454327/blog/504269

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值