Cocos2d-X游戏开发之物理引擎Box2D基础篇(十五)

Cocos2d 自带了两套物理引擎:Box2D 和 Chipmunk。那么我们应该选择哪一个呢?
很多情况下,这个选择取决于个人口味。很多游戏开发者对这两个物理引擎的 争论集中于它们所用的编程语言:Box2D 是用 C++写的,而 Chipmunk 用的是 C。


你可能因为 C++接口而更喜欢 Box2D。使用 C++的好处是它可以很好地与同样是 面向对象的 Objective-C 进行整合。而且 Box2D 中的变量和方法名都是用全称 命名的,相比之下,Chipmunk 中很多地方用的是只有一个字母的简写。

 

再者, Box2D 中使用了运算符重载(Operator Overloading),例如,你可以将两个 矢量(vector)直接相加:
b2Vec2 newVec = vec1 + vec2;
有一些功能只有Box2D提供,Chipmunk是没有的。比如,Box2D有针对快速移动 物体(例如子弹)直接穿透物体而不进行碰撞测试的解决方法。

本文使用的物理引擎是Box2D。

 

一、Box2D简介

Box2D的作者是 Erin Catton ,具体的信息可以去网上搜索。感谢作者。

好的,下面进入正题,介绍下Box2D这个将要使用的物理引擎。

Box2D可以在任何具有C++编译器的平台上面使用。该引擎支持定点和浮点模式编译,在多种移动平台上面都都可以使用,如 Nintendo DS 、Wii 、iPhone、ipad、android、Windows phone 7 等。该引擎目前有多个编程语言和环境的移植版,包括Java、Adobe Flash、C#、JavaScript等主流语言和平台。

Box2D可以进行刚体物理仿真,包括仿真凸多边形、圆形和方形物体。Box2D 中的物体使用关节(joints)连接,并使用力(forces)施加相互作用。它还支持重力、摩擦力和弹性等。

 

二、Box2D核心概念

刚体(rigid body)是非常坚硬的物体,其在Box2D世界中任何碰撞都不会改变它的形态。

约束(constraint)是消除物体自由度的物理连接,自由度在2D世界比较简单,只有横、纵坐标和角度。

接触约束(contact constraint)用于防止刚体穿透,同时模拟摩擦和弹性回复,Box2D自动设置。

关节(joints)是用于将2个或以上的物体进行组装的枢纽,就像是生活中的螺丝钉。

关节制动(joint limit)限定了关节的活动角度,就是螺丝 可能只能转半圈。

关节马达(joint motor)可以按照关节的自由度来驱动所连接的物体。

关节定义(joint definition)在创建关节之前,必须创建一个定义。

note:关节连接的2个物体,不可都为静态物体。

关节工厂是使用世界类的工厂方法来创建和销毁的。

世界类(b2World)是物体(b2Body),夹具(b2Fixture)和各类关节(joints)相互作用的集合。

求解器(solver)用于解决模拟中的约束。一次一个。

物体类(b2Body)拥有位置和速度,可以在物体上应用力、扭矩和冲量。物体分为静态物体、kinematic和动态物体。静态物体永远不会移动并且不会与其他的静态物体或者kinmatic物体发生碰撞。

物体定义(b2BodyDef)是在创建物体前定义的,就像生成一个物体之前,各项属性需要提前设置。

物体工厂方法是在Box2D中用于物体的创建和销毁,这使得世界类可以高效管理物体。

note:永远不要使用new 或 malloc 来创建物体。

子弹(bullet)是指高速移动的物体。

形状类(b2Shape)是物体类的属性,一个物体可以i拥有多个形状。

夹具类是用与将形状和物体绑定在一起。

夹具定义(b2FixtureDef),在创建定义后,可以指定属性、形状、密度、摩擦力、弹性系数、碰撞筛选标识、到父物体的指针、用户自定义数据和传感器标识。

碰撞筛选属于夹具定义的子类。

接触(contact)是Box2D创建的用于管理形状间碰撞的对象。

接触点(contact point)是2个形状相互接触的点。

接触向量(contact normal)是从一个形状到指向另一个形状的单位向量。

接触监听器(b2ContactListener)来获取接受数据。

调试绘图。

模块(Modules)分别为常规、碰撞和动态。常规负责的是内存分配、数学计算和相关设置;碰撞负责的是定义形状和粗测;而动态模块负责的虚拟的世界、物体和夹具 、关节。

单位是浮点数运算 。

 

三、Box2D Demo的解读

PhysicalSprite 类的作用是定义一个和Box2D 世界物体绑定在一起的精灵对象。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值