cocos2d-x游戏实例(4)-地图碰撞
2012-02-25 20:49
225 查看
小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man
这篇继续上一篇的内容,继续地图碰撞,上一篇我们得到了我们所处位置的地图索引,这样我们就可以知道我们要控制的角色的位置对应的地图索引值了,那么如何知道我们这块地图是可以去的还是碰撞呢,这里我介绍两种办法
1.分层法
我觉得这个更适合45度角的地图,因为如果使用后一种办法,把所有的图素宽放在一层里的话,会有遮挡这个问题的,当然不是说第二种不能只不过我们把地图的碰撞图素放在一层里我们会把相应的表现图素放在新的一层里,所以还是要分层。
首先看第一种情况的地图,如下图
![](http://hi.csdn.net/attachment/201202/25/0_13301742734ef8.gif)
就是新建一层Tree层,把所有的树(这里不能碰撞的图素),grass层铺满草,这里人可以在草中移动,检测碰撞的代码如下:
![](http://hi.csdn.net/attachment/201202/25/0_1330174276FwZ0.gif)
首先通过convertto2d函数获得主角在地图上的索引值,这里为了方便,我把索引值也做成CCPoint的类型了,但是事实上,它并不是一个CCPoint,然后获得Tree层,然后根据索引及tileAt函数获得在该位置的图素,如果他不为空,则证明这个位置是不可碰撞的,那么我们就回滚刚才的移动位置操作,并停止该位置的移动即可。这种方法解决起来相对简单。
2.地图GID及属性法
这种方法应该是更为“正统”的,首先在地图上建一层,如下
![](http://hi.csdn.net/attachment/201202/25/0_1330174280IgJi.gif)
只是建一层,然后我们在图素上新建属性,我们建一个叫“conflict”属性,并为他设定不同的值即可。
![](http://hi.csdn.net/attachment/201202/25/0_1330174284886Z.gif)
我们把不可碰得设为1,把可碰的设为0。代码如下:
![](http://hi.csdn.net/attachment/201202/25/0_1330174289CxZO.gif)
我们首先或取GID,其实我们可以根据gid直接判断哪些可碰哪些不能通过。但是为了演示如何获得属性,我们还有之后的代码,通过gid获得属性,属性是一组键值对,然后获得conflict值,这样我们就可以判断了
如有错误之处,希望大家多多指正
下一篇继续游戏实例
这篇继续上一篇的内容,继续地图碰撞,上一篇我们得到了我们所处位置的地图索引,这样我们就可以知道我们要控制的角色的位置对应的地图索引值了,那么如何知道我们这块地图是可以去的还是碰撞呢,这里我介绍两种办法
1.分层法
我觉得这个更适合45度角的地图,因为如果使用后一种办法,把所有的图素宽放在一层里的话,会有遮挡这个问题的,当然不是说第二种不能只不过我们把地图的碰撞图素放在一层里我们会把相应的表现图素放在新的一层里,所以还是要分层。
首先看第一种情况的地图,如下图
![](http://hi.csdn.net/attachment/201202/25/0_13301742734ef8.gif)
就是新建一层Tree层,把所有的树(这里不能碰撞的图素),grass层铺满草,这里人可以在草中移动,检测碰撞的代码如下:
![](http://hi.csdn.net/attachment/201202/25/0_1330174276FwZ0.gif)
首先通过convertto2d函数获得主角在地图上的索引值,这里为了方便,我把索引值也做成CCPoint的类型了,但是事实上,它并不是一个CCPoint,然后获得Tree层,然后根据索引及tileAt函数获得在该位置的图素,如果他不为空,则证明这个位置是不可碰撞的,那么我们就回滚刚才的移动位置操作,并停止该位置的移动即可。这种方法解决起来相对简单。
2.地图GID及属性法
这种方法应该是更为“正统”的,首先在地图上建一层,如下
![](http://hi.csdn.net/attachment/201202/25/0_1330174280IgJi.gif)
只是建一层,然后我们在图素上新建属性,我们建一个叫“conflict”属性,并为他设定不同的值即可。
![](http://hi.csdn.net/attachment/201202/25/0_1330174284886Z.gif)
我们把不可碰得设为1,把可碰的设为0。代码如下:
![](http://hi.csdn.net/attachment/201202/25/0_1330174289CxZO.gif)
我们首先或取GID,其实我们可以根据gid直接判断哪些可碰哪些不能通过。但是为了演示如何获得属性,我们还有之后的代码,通过gid获得属性,属性是一组键值对,然后获得conflict值,这样我们就可以判断了
如有错误之处,希望大家多多指正
下一篇继续游戏实例
相关文章推荐
- cocos2d-x游戏实例(4)-地图碰撞
- Cocos2D-x游戏开发之十九:瓦块地图之碰撞检测
- Cocos2d-x3.0游戏实例之《别救我》第七篇——物理世界的碰撞检測
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检测(2)--主角吃金币
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环&主角加入动作
- Cocos2d-x游戏实例-《跑跑跑》制作教程(第一篇)——加载地图
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检测(1)
- Cocos2d-X 瓦片地图使用的实例项目(包含碰撞检测,移动)
- cocos2d-x游戏开发系列教程-坦克大战游戏之子弹和地图碰撞
- 【木头Cocos2d-x 009】游戏实例-《跑跑跑》制作教程(第一篇)——加载地图
- cocos2d-x游戏实例(3)-获得地图索引
- cocos2d-x游戏开发系列教程-坦克大战游戏之子弹和地图碰撞
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检測(1)
- (译)碰撞检测和收集物品:如何使用cocos2d制作基于tiled地图的游戏:第二部分
- Cocos2d-x3.0游戏实例之《别救我》第七篇——物理世界的碰撞检测
- Cocos2d-x游戏实例-《跑跑跑》制作教程(第四篇)——地图卷动
- (译)碰撞检测和收集物品:如何使用cocos2d制作基于tiled地图的游戏:第二部分
- cocos2d-x游戏实例(3)-获得地图索引
- (译)碰撞检测和收集物品:如何使用cocos2d制作基于tiled地图的游戏:第二部分
- Cocos2d-x 3.2 lua飞机大战开发实例(三)道具的掉落,碰撞检测,声音,分数,爆炸效果,完善游戏的功能细节