cocos2d-x之物理引擎box2d(2)
来源:互联网 发布:淘宝买家地址怎么修改 编辑:程序博客网 时间:2024/05/09 06:17
小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man
由于box2d的内容比较多,它也有自己的testbed例子,所以关于比较深入的box2d引擎内容,我准备单开一个专题去研究它的testbed例子,当然,是嵌入到我们的cocos2d中的testbed,因为box2d本身就是用C++编写的,所以区别不是很大。
首先看一下box2dtest这个例子,这个例子相对简单
就是可以点击屏幕,在屏幕中生成方块,然后方块之间有碰撞,就这么简单,但是带出了整个cocos2d-x的框架。
第一步当然是构建整个世界,正如上一节所说的,建立重力,通过重力构建生成世界,当然,这也是使用这个引擎new构建为数不多地方,因为有世界才有一切
第二步就是构建地面及墙壁,这里面的做法略有不同,因为要构建一个空心的物体,因此我们不能直接定义,而是分别定义长方体里的四个边。
另外一个需要注意的地方就是我们进行了长度的转换,由于box2d采取的现实世界的米作为计量长度的单位,这里要注意的是长度范围在0.1m到10m范围内的物体模拟的效果更好,所以我们要把我们的像素级的长度单位转换为米的单位就要除以PTM_RATIO(定义32像素为1米)。
需要说明的是,这里我对例子进行了修改,例子是以屏幕的中心为锚点,而我,是以原点为锚点的,我觉得这样更好理解。
之后使用批处理精灵类管理所有的盒子,先生成格子的定义,在通过定义生成物体
可以看到类型是动态刚体,另外值得注意的就是用userData这个参数保留了我们的对象,从而完成了对象和刚体的绑定
之后再绑定形状,先生成形状,在通过关联来绑定形状
在初始化方法里调用scheduleUpdate()使得模拟出每个时间步更新,并在update中进行更新,如下图所示。Box2d是通过定期调用step来更新动画的,step的第一个参数是时间步,这里我进行了修改,因为dt会不同,所以不建议用dt来作为时间步,而要给他一个固定的时间步这样才不会显得动画时快时慢,第二个参数是速度迭代次数,推荐8次,超过10次的基本看不出效果的提升,第三个参数是位置迭代,这个1次就行,底下的步骤就是遍历整个世界,找出对应精灵的刚体,进行位置更新就可以了
关于物理引擎的深入研究,我想再开一个系列的文章来单独谈,因为这个的例子写的也很好,对不同类型游戏的开发都很有用
刚开始研究此引擎,如有错误之处,希望大家多多指正
下一篇打算写精灵类的深入研究
- cocos2d-x之物理引擎box2d(2)
- cocos2d-x之物理引擎box2d(1)
- Cocos2d-x之Box2D物理引擎
- cocos2d-x 物理引擎box2d
- cocos2d-x 物理引擎box2d
- cocos2d-x 物理引擎Box2D
- cocos2d-x 物理引擎Box2D 连接器之距离连接器
- cocos2d-x 物理引擎Box2D 连接器之旋转连接器
- cocos2d-x学习之box2d物理引擎打砖块
- cocos2d-x初探学习笔记--物理引擎box2d(2)
- cocos2d-x 物理引擎BOX2d学习
- Cocos2d-x Box2D物理引擎编译设置
- cocos2d-x-3.2启用Box2d物理引擎
- cocos2d-x-3.2 Box2d物理引擎起步
- Cocos2d-x教程Box2D 物理引擎
- cocos2d-x Box2d物理引擎基础操作
- Cocos2d-x教程-Box2D 物理引擎
- cocos2d-x box2d物理引擎深入研究 第一篇之旋转关节详解(b2RevoluteJoint)
- 限制一个远程会话的用户(可用两种方法实现)
- Activity生命周期管理之一——Starting一个Activity
- 基本单链表实现
- C#多线程与UI响应 防界面假死
- 用C#比较字符串有多种方法
- cocos2d-x之物理引擎box2d(2)
- CMD命令大全
- MySQL 同步两个表的某些字段
- 用DOS命令怎么查看局域网内的ip
- boost program_options
- 奇偶校验
- Oracle SQL性能优化技巧大总结
- 为什么静态函数不能使用实例字段以及实例函数
- 索引扫描与索引查找