文档章节

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

新时代干爹
 新时代干爹
发布于 2015/09/10 11:13
字数 349
阅读 41
收藏 0

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


© 著作权归作者所有

共有 人打赏支持
新时代干爹
粉丝 0
博文 5
码字总数 4490
作品 0
汉中
程序员
私信 提问
忍者无敌-实例讲解Cocos2d-x瓦片地图

实例比较简单,如图所示,地图上有一个忍者精灵,玩家点击他周围的上、下、左、右,他能够向这个方向行走。当他遇到障碍物后是无法穿越的,障碍物是除了草地以为部分,包括了:树、山、河流等...

智捷课堂
2014/09/19
0
1
Unity3D中Isometric Tilemap功能实践

前言 最近出于兴趣想自己做一个2D的游戏,因为有着C#的基础,所以决定使用Unity3D来做。 之前对于Unity3D其实了解不多,不过看了一些Unity3D的视频和官方文档后,暂时做起来也没遇到什么太大...

韩子卢
01/31
0
0
Cocos2d实现类似Clash of clans的缩放拖拽效果

最近开始跳入做游戏的坑了,而且想做一款独立游戏,虽然随时有烂尾的危险,但无妨一试~敬请期待~ 目前正在准备游戏的原型,由于需要设计像COC的缩放场景,作为cocos2d的菜鸟兼ios开发新手,实...

_EKC
2013/10/20
0
0
【博物纳新】2D开源库合辑推荐

版权声明:本文所有文章均为原创,原文链接:blog.uwa4d.com,如需转载请联系support@uwa4d.com https://blog.csdn.net/UWA4D/article/details/84661795 自从推出了博物纳新栏目,小编就陷入...

UWA
2018/12/01
0
0
在Tiled Map中使用碰撞检测

在这篇教程里,我们会讲解如何使用cocos2d和Tiled Map Editor创建一个基于tiled map的游戏.作为例子,我们会制作一个小游戏.游戏的主要内容是一个忍者在沙漠里寻找可口的西瓜吃. 这篇教程主要学...

长平狐
2012/08/29
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

2019 年最好的 7 款虚拟私人网络服务

糟糕的数据安全会带来极大的代价,特别是对企业而言。它会大致大规模的破坏并影响你的品牌声誉。尽管有些企业可以艰难地收拾残局,但仍有一些企业无法从事故中完全恢复。不过现在,你很幸运地...

linuxCool
35分钟前
1
0
OSChina 周一乱弹 —— 加油,还有11个小时就下班了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @_全村的希望 :吴亦凡把大碗面正儿八经做成单曲了,你别说,还挺好听 《大碗宽面》- 吴亦凡 手机党少年们想听歌,请使劲儿戳(这里) @tom_t...

小小编辑
56分钟前
233
12
C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
7
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
6
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部