cocos2d-x 菜鸟学习笔记十七(简单的碰撞检测 实践篇 下)

原创 2013年06月10日 14:25:21

最后这一节记录一下cloudBomb中冲击力影响的实现和碰撞过滤。利用chipmunk中的冲击力函数可以在导弹爆炸时弹飞附近的刚体,达到最真实的爆炸所产生的物理影响,其实在游戏中也可以用来做释放技能之类的影响区域,下面是代码:

首先需要拿到导弹爆炸后,在影响范围内的刚体坐标:

	cpSpaceNearestPointQuery(space,shape->body->p,100,12,CP_NO_GROUP,actionNearestPoint,NULL);

上面第一个参数是物理空间,第二个是导弹shape刚体的坐标,第三个参数是最大影响范围(距离),第四个是shage的层标识,第五个是组(设定是无组),第六个是获取导弹附近刚体坐标后的回调函数,最后一个是回调时使用的自定义参数。其中第四和第五个参数用来限制影响的对象,比如只作用于一组对象……然后是回调代码:

	//获取爆炸点附近坐标后的回调函数
	static void actionNearestPoint(cpShape *shape, cpFloat distance, cpVect point, void *data);

//获取爆炸点附近坐标后的回调函数
void HelloWorld::actionNearestPoint(cpShape *shape, cpFloat distance, cpVect point, void *data){
const cpFloat splash = 100.0;
const cpFloat strength = 400.0;
cpBody *dbody = shape->body;
		
		// Use the nearest point to calculate the impulse to apply.
		// This makes for a pretty good approximation.
		//强度设定
		cpFloat intensity = 1.0 - cpvdist(dbody->p, point)/splash;
		//冲击力计算
		cpVect impulse = cpvmult(cpvnormalize(cpvsub(dbody->p, point)), strength*intensity);
		//应用冲击到对应的刚体
		cpBodyApplyImpulse(dbody,impulse,cpvsub(point, dbody->p));
		
		// Play with the boxes' emotions.
		Box *dbox = (Box*)dbody->data;
                //这里只做了个表情的输出日志,有兴趣的可以自己做着玩
		dbox->makeUpset();
}

至于箱子精灵的自定义代码其实和乌云精灵的差不多,只是用的是物理精灵类,所以基本只是改变一个图片纹理而已,然后需要给shape的layers属性设定一下shape->layers=12; 这个shape中的layers属性其实和层的概念是一样的,同时也可作为碰撞的过滤规则,像我在前面例子中没有设定shape的layers属性,所以物理空间里的任何对象都会发生碰撞,而在原例中,导弹与箱子或者导弹之间并不会发生实质性的碰撞,就是因为定义了这样的过滤规则。当导弹和箱子的layers不是同一属性值时,两者是不会有碰撞发生的。

最后看看导弹在碰撞墙体爆炸后箱子被弹飞的效果图:


源代码下载:http://download.csdn.net/detail/cyistudio/5558209

实例介绍Cocos2d-x物理引擎:碰撞检测

碰撞检测是使用物理引擎的一个重要目的,使用物理引擎可以进行精确的碰撞检测,而且执行的效率也很高。在Cocos2d-x 3.x中使用事件派发机制管理碰撞事件,EventListenerPhysicsCo...
  • tonny_guan
  • tonny_guan
  • 2014年09月26日 18:32
  • 17364

cocos2d-x 菜鸟学习笔记十六(简单的碰撞检测 实践篇 中)

这一篇就说说导弹发射与碰撞部分的代码,总体来说就和一个微型的飞行射击游戏差不多,但是在这部分内容里,游戏运用了一些碰撞后的特效代码如:背景闪烁、地面出现弹坑……不过貌似cocos2d-x没有完全封装c...
  • cyistudio
  • cyistudio
  • 2013年06月09日 15:38
  • 7907

Cocos2d-x3.2总结(四)使用物理引擎进行碰撞检测

如果你在游戏中
  • cbbbc
  • cbbbc
  • 2014年08月13日 19:10
  • 5282

cocos2d-x 菜鸟学习笔记十五(简单的碰撞检测 实践篇 上)

这里以chipmunk官方的一个例子来展示一下物理引擎在游戏中的具体应用,例子名称是Cloud Bomber,虽然只有obj-c的源码,但还是本着看看编程思想的心态学习了一下。掌握这个例子核心的内容也...
  • cyistudio
  • cyistudio
  • 2013年06月07日 22:37
  • 1790

cocos2d-x 菜鸟学习笔记十四(简单的碰撞检测 进阶篇)

上一篇记录了chipmunk的使用流程,其实还算不上是碰撞检测,但在游戏中需要利用这些碰撞事件来执行对应的动作,这就涉及到另一部分的内容了,即怎样在发生碰撞事件的时候调用对应的工作代码。 首先是为碰...
  • cyistudio
  • cyistudio
  • 2013年06月05日 11:44
  • 3853

cocos2d-x 菜鸟学习笔记十三(简单的碰撞检测)

cocos2d-x里有两个物理引擎分别是box2d和chipmunk(金花鼠,不知道为什么叫这名字……),如果想看看基础的常识及这两个物理引擎的区别请到以下网址:http://bsr1983.itey...
  • cyistudio
  • cyistudio
  • 2013年06月03日 13:40
  • 5319

cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检测(1)

这里把cocos2d-x 3.0的物理碰撞检测单独抽离出来,做成一个简单的项目,可以看到物理碰撞检测的效果,也适合新手入门,为下一步主角和金币碰撞做准备...
  • ZYY173533832
  • ZYY173533832
  • 2014年07月31日 09:13
  • 3255

cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检测(2)--主角吃金币

说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本重写的,目前我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...
  • ZYY173533832
  • ZYY173533832
  • 2014年07月31日 10:22
  • 2530

【amazing cocos2d-x 3.0之十七】使用新物理引擎实现碰撞检测

如果上一篇文章,你看懂了,那么这篇文章,相信对你应该问题不大,会有一个lishi...
  • Legendof1991
  • Legendof1991
  • 2014年04月11日 16:00
  • 3072

cocos2d-x系列笔记—瓦块的碰撞检测

原文:http://www.xuebuyuan.com/1693882.html
  • Glimpse_006
  • Glimpse_006
  • 2014年05月24日 01:34
  • 746
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2d-x 菜鸟学习笔记十七(简单的碰撞检测 实践篇 下)
举报原因:
原因补充:

(最多只允许输入30个字)