小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man

继续上一篇动作游戏的实例,加入左右边界的碰撞,效果如下:

左右边界的碰撞,需要借助到地图中的图素的属性部分

鼠标右键属性,加入collion属性(自己定义的名字),并把属性的值设置为2,这样我们在我们的程序中获得属性后我们就可以判断这个图素是否是地图中的碰撞块,获得地图的属性主要通过如下几句:

CCTMXLayer* layer = map->layerNamed("logic");//获得相应的地图层

int tilegid = layer->tileGIDAt(playerindex);//获得GID

CCMutableDictionary<string,CCString *> *tiledic = map->propertiesForGID(tilegid);//获得属性键值对

CCString *mvalue = tiledic->objectForKey("collion");//获得属性colloion

int mv = mvalue->toInt();//转为整型数值

整体的判断水平碰撞函数playermaphcollision如下:

首先是获得主角的站立位置,主角宽高,然后获得地图对象,之后便是一个for循环,这个for循环是从主角的脚底遍历到头顶的纵坐标值,然后就是对应纵坐标值和横坐标值,除以图素的宽高,获得对应地图的索引坐标,由于我们要分别检测左侧和右侧的碰撞,所以相应的横坐标也就不同

获得左侧横坐标:indexx = (playerpoint.x - palyersize.width / 2) / map->getTileSize().width;

获得右侧横坐标:indexx = (playerpoint.x + palyersize.width / 2 - 1) / map->getTileSize().width;

因为锚点在中心,所以左右侧分别就是减去和加上宽度的一半,然后不同之处就是,处理右侧时候要减一,因为我们左侧的碰撞是获得边界左侧的,而右侧的碰撞是获得边界右侧的。当我们的坐标属于以下范围时他属于这个图素块的索引index:(index - 1)* 图素宽 <= x < index * 图素宽,也就是我们的坐标如果等于右侧边界值,那么他就会被算在下一个索引值里,所以在处理右侧时为了防止等于边界值时被误算入下一块图素块时出现“卡”在地图上的情况,在处理右侧碰撞时减一。

下面就是检测如果碰上碰撞块时把水平移动的标志设置为0,然后校正位置,把主角移动到不碰撞的位置上,并且重新设置主角位置;

另外,修正上一篇中的一个问题,在获得主角在屏幕中位置时要获得主角的绝对坐标,要加上地图的坐标,因为我们设置主角的位置时,是设置在地图上的,所以主角的位置是相对与地图坐标的,代码如下:

如有错误之处,希望大家多多指正

下一篇继续简易动作游戏

cocos2d-x游戏实例(24)-简易动作游戏(2)相关推荐

  1. cocos2d-x游戏实例(28)-简易动作游戏(6)

    小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man 本篇继续简易动作游戏实例,本篇加入简单血量条u ...

  2. cocos2d-x游戏实例(27)-简易动作游戏(5)

    小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man 继续简易动作游戏实例,本篇加入小怪并且加入小怪 ...

  3. cocos2d-x游戏实例(26)-简易动作游戏(4)

    小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man 继续上一篇的简易动作游戏,本篇加入主角的跳跃, ...

  4. cocos2d-x游戏实例(25)-简易动作游戏(3)

    小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man 本篇进行垂直方向上的碰撞检测,测试的方法就是把 ...

  5. cocos2d-x游戏实例(23)-简易动作游戏(1)

    小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man 从本篇开始,开始一个简单的动作类游戏的实例,本 ...

  6. Cocos2D教程:使用SpriteBuilder和Cocos2D 3.x开发横版动作游戏——Part 2

    本文是"使用Cocos2D 3.x开发横版动作游戏"系列教程的第二篇,同时也是最后一篇.是对How To Make A Side-Scrolling Beat Em Up Game ...

  7. 【ThinkGame】我对动作游戏的思考,以及一个游戏程序能为动作游戏做什么?

    终于,我决定进入游戏行业,并踏进去了一只脚. 2019年的游戏<只狼>,让我看到了东方文化在动作游戏中的完美诠释,中国本应可以在以东方文化为卖点的电子游戏行业中大放光彩,却因为不可抗的力量 ...

  8. python迷宫小游戏代码_pygame简易迷宫游戏_mask应用示例程序

    用pygame制作的迷宫小游戏.像这类碰撞检测用mask最好.下面是部分代码预览: """ 简易迷宫游戏.本程序演示一个非常简单的迷宫游戏原理. 采用mask进行碰撞检测 ...

  9. 游戏设计之我见 —— 动作游戏中敌人的受击设计

    这篇博客结合一些游戏案例,介绍了3D动作游戏中敌人的受击设计. 在动作游戏中,由于玩家与敌人在一直进行不停地攻防博弈,因此为了给予玩家正切且适当的攻防反馈,需要着重设计敌人受伤以及死亡的设计. 受伤反 ...

最新文章

  1. Alpha 冲刺(2/10)
  2. EduCoder Linux之文件/目录搜索
  3. C#启动停止SQL数据库服务
  4. LCA求解的四种模板
  5. 在VS2005中使用添加变量向导十分的
  6. 时间序列分析 lstm_LSTM —时间序列分析
  7. postman替换快捷键ctrl加什么_电脑截图快捷键ctrl加什么
  8. Qt文档阅读笔记-QTcpServer官方解析与实例(使用QSocket创建简单的HTTP服务器)
  9. 联想拯救者Y90关键参数曝光:22GB运存+640GB超大存储
  10. Windows和VMware下ubuntu切换界面的快捷键
  11. 倒计时 2 天!「2019 嵌入式智能国际大会」全日程大公开!
  12. tensorflow版本1.11.0
  13. 图像中有关位图、色位图、以及所占字节数
  14. java unit scanner_Java输入输出常用类Scanner
  15. paip.使用继承机制来实现控制反转或依赖倒置
  16. 什么软件可以搜C语言题答案,C语言题库(带答案)-排版Word版
  17. Dreamweaver简单网页——HTML+CSS小米官网首页的设计与实现
  18. 三星手机开发游戏工具 提升游戏体验
  19. 免费的PHP在线解密工具源码
  20. 软件测试之---测试设计方法

热门文章

  1. RocketMQ集群之搭建2m2s集群(配置说明)
  2. php数组格式化显示,php 打印数组格式化显示
  3. mysql列偏移_MySQL:如何对待分布偏移的数据
  4. oracle11 不更新记录,oracle11g 使用first_value获取表中不连接的ID号及掉失记录数量...
  5. multipartfile前端怎么传_前端那些事如何更好管理 Api 接口
  6. python制作软件封面_用python给MP3加封面图片,修改作者,专辑等信息
  7. Cortex-M3-MPU(存储器保护单元)
  8. BugkuCTF web2
  9. 云中的机器学习:FPGA 上的深度神经网络
  10. 零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下)