cocos2d-x初探学习笔记(20)--物理引擎box2d(2)

原创 2012年02月06日 21:10:37

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

由于box2d的内容比较多,它也有自己的testbed例子,所以关于比较深入的box2d引擎内容,我准备单开一个专题去研究它的testbed例子,当然,是嵌入到我们的cocos2d中的testbed,因为box2d本身就是用C++编写的,所以区别不是很大。

首先看一下box2dtest这个例子,这个例子相对简单


就是可以点击屏幕,在屏幕中生成方块,然后方块之间有碰撞,就这么简单,但是带出了整个cocos2d-x的框架。


第一步当然是构建整个世界,正如上一节所说的,建立重力,通过重力构建生成世界,当然,这也是使用这个引擎new构建为数不多地方,因为有世界才有一切

第二步就是构建地面及墙壁,这里面的做法略有不同,因为要构建一个空心的物体,因此我们不能直接定义,而是分别定义长方体里的四个边。

另外一个需要注意的地方就是我们进行了长度的转换,由于box2d采取的现实世界的米作为计量长度的单位,这里要注意的是长度范围在0.1m10m范围内的物体模拟的效果更好,所以我们要把我们的像素级的长度单位转换为米的单位就要除以PTM_RATIO(定义32像素为1米)。

需要说明的是,这里我对例子进行了修改,例子是以屏幕的中心为锚点,而我,是以原点为锚点的,我觉得这样更好理解。



之后使用批处理精灵类管理所有的盒子,先生成格子的定义,在通过定义生成物体


可以看到类型是动态刚体,另外值得注意的就是用userData这个参数保留了我们的对象,从而完成了对象和刚体的绑定

之后再绑定形状,先生成形状,在通过关联来绑定形状


在初始化方法里调用scheduleUpdate()使得模拟出每个时间步更新,并在update中进行更新,如下图所示。Box2d是通过定期调用step来更新动画的,step的第一个参数是时间步,这里我进行了修改,因为dt会不同,所以不建议用dt来作为时间步,而要给他一个固定的时间步这样才不会显得动画时快时慢,第二个参数是速度迭代次数,推荐8次,超过10次的基本看不出效果的提升,第三个参数是位置迭代,这个1次就行,底下的步骤就是遍历整个世界,找出对应精灵的刚体,进行位置更新就可以了


关于物理引擎的深入研究,我想再开一个系列的文章来单独谈,因为这个的例子写的也很好,对不同类型游戏的开发都很有用

刚开始研究此引擎,如有错误之处,希望大家多多指正

下一篇打算写精灵类的深入研究



版权声明:本文为博主原创文章,未经博主允许不得转载。

cocos2d-x初探学习笔记(20)--物理引擎box2d(2)

小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man 由于box2d的内容比较多,它也有自...
  • liujiayu2
  • liujiayu2
  • 2015年07月16日 16:39
  • 357

cocos2d-x初探学习笔记--物理引擎box2d(2)

小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man 由于box2d的内容比较多,它也有自...
  • hayaceo
  • hayaceo
  • 2013年12月23日 16:46
  • 746

物理引擎比较:Box2D 对比 Chipmunk

Cocos2d 自带了两套物理引擎:Box2D 和 Chipmunk。那么我们应该选择哪一个呢? 很多情况下,这个选择取决于个人口味。很多游戏开发者对这两个物理引擎的 争论集中于它们所用的编程语言:...
  • benbenxiongyuan
  • benbenxiongyuan
  • 2014年08月29日 22:03
  • 3248

cocos2d-x初探学习笔记--物理引擎box2d(1)

小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man 在游戏中我们经常要加入物理碰撞等和物...
  • hayaceo
  • hayaceo
  • 2013年12月23日 16:55
  • 654

cocos2d-x初探学习笔记(19)--物理引擎box2d(1)

小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man 在游戏中我们经常要加入物理碰撞等和物...
  • liujiayu2
  • liujiayu2
  • 2015年07月16日 16:38
  • 246

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

在Box2D中碰撞事件通过实现b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象函数:virtual void BeginContact...
  • tonny_guan
  • tonny_guan
  • 2014年10月09日 19:08
  • 5482

unity中使用box2d物理引擎一 – unity3d游戏开发

unity的博客好久都没有更新了,今天带了的绝对是劲爆的干货。。。 大家使用unity开发游戏估计有一大部分是开发2D的游戏,可能会用到物理系统。但是unity的物理系统计算了z轴有时候就会感觉...
  • djun100
  • djun100
  • 2013年10月17日 16:35
  • 4039

cocos2d-x之物理引擎box2d(2)

小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man 由于box2d的内容比较多,它也有自己的...
  • AngryXXQ
  • AngryXXQ
  • 2013年01月10日 10:11
  • 470

使用Box2d实现物体在液体中的漂浮效果(一)

使用Box2d物理引擎制作物体在液体中的漂浮效果
  • qwertyupoiuytr
  • qwertyupoiuytr
  • 2017年01月03日 20:53
  • 629

cocos Box2D物理引擎

Box2D new&&delete 使用new会调用构造函数使用delete会调用析构函数 malloc&&free  c的库函数,仅仅用来申请内存空间 构造:先构造父类后构造本身 ...
  • zhanghow
  • zhanghow
  • 2016年10月10日 20:56
  • 260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2d-x初探学习笔记(20)--物理引擎box2d(2)
举报原因:
原因补充:

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