第一个项目(八)碰撞检测

碰撞检测部分的代码写了有一整天,因为地图编辑器其实很不熟悉,所以走了很多弯路,把今天的代码和细节分享给大家

首先肯定要封装到函数里面,名字就叫pengzhuang()吧,这个函数写在自定义的update里面,每帧都执行检测。

因为我的障碍物都画在地图上,所以传统的矩形检测不能用,那个是精灵对精灵的,这个精灵和地图的交互实在头疼,如果要碰撞的话,肯定要检测坐标,但是cocos2dx的坐标原点和地图的原点是不一样的,一个左下,一个左上,所以要先写一个函数来换算,point_player_to_tile()

CCPoint Stage::point_player_to_tile(CCPoint pos)
{
	CCSize mapSize=map->getMapSize();
	CCSize tileSize=map->getTileSize();
	int x= pos.x/tileSize.width;
	int y= (640-pos.y)/tileSize.height;
	return ccp(x,y);

}

碰撞函数如下

void Stage::pengzhuang()
{

	CCSize PlayerSize=player->getContentSize();
	CCPoint PlayerPoint=player->getPosition();

	CCPoint P=ccp(PlayerPoint.x,PlayerPoint.y);
	CCPoint tilecoord = this->point_player_to_tile(P);//将坐标转换成tile坐标
	CCTMXLayer *layer = map->layerNamed("block2") ; //获取地图层
	int tilegid = layer->tileGIDAt(tilecoord);//获取图素GID值
	CCLOG("tilegid: %f %f", tilecoord.x,tilecoord.y);
	if (tilegid)
	{
		CCDictionary *properties  = map->propertiesForGID(tilegid)  ;//根据GID值获取图素属性键值集合
		if (properties)
		{
			const CCString *str = properties->valueForKey("ShiTou");//键值名称
			if (str && str->compare("true") == 0)    //如果键值是true
				player->runAction(getRunAction());
		}
	}

注释已经很清楚了,首先转换坐标,然后获得该坐标处的GId(该值为每个方块的唯一id,就像身份证),判断身份证存在与否,存在的话判断这个键值是不是ture。

如果都符合,就执行动作。

但是我就是很奇怪,这个判断是无效的,但是明明逻辑没问题,官网也是这么给的,于是一遍一遍的debug,才发现...............地图是向左滚的啊!!!方块的x坐标要加上滚出屏幕外的!!!!

于是在updat里面加入了帧值,每过一帧加一,然后用这个值乘以速度,乘积加上要判断点的x之和再除以小方块长,这才是小方块相对于地图的坐标。

CCPoint Stage::point_player_to_tile(CCPoint pos)
{

	CCSize mapSize=map->getMapSize();
	CCSize tileSize=map->getTileSize();
	int x= (map_time*10+pos.x)/tileSize.width;
	int y= (640-pos.y)/tileSize.height;

	return ccp(x,y);

}

这样和地图的交互就完成了,当然,我只是用一个点来做实验,因为是跑酷类游戏,主角的好多地方都可能发生碰撞,所以要多加几个点吧,能想到的暂时就这样,如果点太多了,反而帧率又下降了。

时间: 2024-10-18 13:03:54

第一个项目(八)碰撞检测的相关文章

【C++探索之旅】第一部分第八课:传值引用,文件源头

内容简介 1.第一部分第八课:传值引用,文件源头 2.第一部分第九课预告:数组威武,动静合一 传值引用,文件源头 这一课的标题有点怪.其实是由这一课的几个重点内容结合起来取的名,慢慢学习就知道啦. 上一课<[C++探索之旅]第一部分第七课:函数效应,分而治之>中,我们初步认识了函数. 不过不要高兴得太早,你以为函数就这样离你远去了嘛?怎么可能,函数将伴随一生好吗,只要你继续编程的话.哈哈,所以你是跑不掉了~ [小编,都跟你签了协议了,没吃药不要随便出来溜达] 这一课我们就继续深入学习与函数相关

django第一个项目

创建第一个项目 使用 django-admin.py 来创建 dalilala项目: django-admin.py startproject dalilala 创建完成后我们可以查看下项目的目录结构: $ cd dalilala/$ tree.|-- HelloWorld|   |-- __init__.py|   |-- settings.py|   |-- urls.py|   `-- wsgi.py`-- manage.py 目录说明: Dalilala: 项目的容器. manage.p

自我总结(六)---(学习j2ee+j2ee第一阶段项目)

自我完善的过程就是在不断的自我总结不断的改进. 学习了Struts2 Spring Hibernate. 十天前结束了这个课程.也考试了.这次考试老师说机试考的还不错.其实就是一个简单的用户登录,进行一个增删改的功能.因为实在元旦过后来就考试嘛!我是在元旦期间的时候也做了增删改的一个作业.所以在考试的时候也就快一些.但是在考试的时候也遇到一个问题,由于少导入了一个包,我的验证就不行了.我把这样写的运用到我后面的项目区就完全不行了.这是我最搞不明白的事.笔试题刚刚及格.课程结束了. 但是对于ssh

【scrapy】创建第一个项目

1)创建项目命令: scrapy startproject tutorial 该命令将在当前目录下创建tutorial文件夹 2)定义Item Items are containers that will be loaded with the scraped data;They are declared by creating a scrapy.Item class and defining its attibutes as scrapy.Field objects. import scrapy

[Asp.net MVC]Asp.net MVC5系列——第一个项目

目录 概述 创建第一个项目 添加控制器 总结 概述 本教程是个人一步一步学习的总结,希望能帮到正在进入ASP.Net MVC5方向的朋友,个人也是准备进入ASP.NET MVC5领域,虽然艰辛,但是乐此不彼.谁让咱喜欢编程呢?之前接触过ASP.NET MVC4,今天在看发现差别还是有的,不管是使用IDE创建方式,还是使用方式有些地方的确不一样了.手上也没有ASP.NET MVC5的教程,只能看着英文网站,一步一步摸索了.其实我是一直想使用mvc,可事与愿违啊,到目前还是使用的webform. 创

Cocos2dx 学习笔记整理----第一个项目

接上一节, 进入新建的项目下面的proj.win32下面,找到项目名.sln文件(我的是game001.sln),双击会通过VS2010打开.(当然,你装了VS什么版本就是什么版本) 将你的项目设为启动项目, 切换到解决方案视图, 然后邮件点击解决方案, 选择生成解决方案. 第一次生成根据个人机器性能会消耗大概1-3分钟,呵呵. 但是以后会快很多的. 生成成功的话会在输出窗口显示如下: 一般都会生成成功,但是我生成的时候失败了很多次,后来发现是这个问题:http://www.cnblogs.co

&lt;转&gt;从Java转iOS第一个项目总结

从Java转iOS第一个项目总结 阅读目录 0.前言 1.项目介绍 2.项目使用的第三方开源库 3.工具和插件介绍 4.集成友盟 5.即时通讯 6.项目总结 0.前言 本人14年12月份,从网站开发组转到了移动开发组,自己的java两年半工作经验变成了object-c零经验.2015年1月份新启动了一个移动项目,年后因为人事变动,自己从辅助开发变成了"核心"开发,目前项目基本接近尾声,下面进行总结,希望对一些人能有帮助, 另外也希望ios大牛进行指导 回到顶部 1.项目介绍 项目属于一

成长日记--记录在WB的第一个项目。

具体为什么跑去外包,只能说自己太水了,或者太懒了,都不好好投简历,也没入这个坑过,如果有想去外包的,除非钱给到市场价的1.5倍以上,否则别考虑了. 项目是国内第一做通信公司的,从具体的需求说起比较好,不,还是要从一个坑货项目经理说起,说起这个项目经理,不得不服他,测试出身,来带我们这个开发团队,开发团队里很多大牛的,HW的工作5年+三星工作3年的,HW工作10+的,ZX工作8+的,ZX工作10+的,HW工作到退休的,具体就不一一说了,反正团队的能力毋庸置疑,但是这个项目经理完全不懂开发,不知道什

奔跑中的2015-入职后的第一个项目总结

从2014年11月18日到2015年7月1日离开,在石家庄待了半年有余,从项目的开始到结束.体验了初次承担项目的兴奋,也体验了一人在外的艰辛.走的时候有些突然,本想跟石家庄帮助过我的那些伙伴好好吃个饭,说些对他们来说显得有些"肉麻"的话,好好道个别.而现实好多事情总是会突兀地出现点意外,使原有的计划一再延后,这次更是给了我个遥遥无期. 正像我突然之间接到去石家庄出差一样,在项目收尾之际又突然之间收到公司的邮件通知再次这么莫名地上路了...... 这次的项目对于公司来说,只是一份收入来源

【C语言探索之旅】 第一部分第八课:第一个C语言小游戏

? 内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文