Cocos2d-x 3.x物理世界

本文介绍了Cocos2d-x 3.x中的物理世界,包括PhysicsWorld和PhysicsBody的概念及用法。PhysicsWorld用于模拟物理碰撞,可通过Scene::createWithPhysics()创建。PhysicsBody代表刚体,允许设置速度、角速度等属性。文章还讨论了刚体的掩码、接触和碰撞分组,以及如何设置接触和碰撞回调函数。
摘要由CSDN通过智能技术生成

Box2D 和 Chipmunk2D 是以往 cocos2d 中两款常用的物理引擎,这两个物理引擎精确的说是刚体物理仿真库,这里的物理就是刚体动力学。而我们在谈到这物理引擎的时候,经常会听到刚体(Rigid body)。那什么是刚体?刚体就是在任何外力的作用下,体积和形状都不发生改变的物体。动力学又是什么?动力学是计算刚体在受力作用下随时间移动并相互作用的一个过程。Box2D和Chipmunk2D两个引擎的建构理论基础当然基于此。

  • PhysicsWorld 是 cocos2d 封装的一个用于模拟真实“物理世界”的类。
  • 一个 PhysicsWorld 对象,用于模拟物理碰撞和其他物理行为。你不需要直接创建PhysicsWorld对象;相反,你可以从一个场景对象获取它。

简介

通常,我们通过Scene::create()创建的场景不是基于物理世界的场景。而使用Scene::createWithPhysics()创建场景时,那么这样创建的场景将是基于物理世界的。

PhysicsWorld

  • 设置物理世界的重力值
void setGravity(const Vec2 &gravity);
  • 设置更新物理世界的子步骤的数量。
void setSubsteps(int steps);
  • 设置物理世界的仿真执行速度
void setSpeed(float speed);
  • 获得物理世界的刚体
PhysicsBody * getBody(int tag);
const Vector< PhysicsBody * > & getAllBodies();
  • 移除一个物理刚体
virtual void removeBody(PhysicsBody *body);
virtual void removeBody(int tag);
  • 获得指定坐标上的物理形状
Vector< PhysicsShape * > getShapes (const Vec2 &point);
  • 获得指定坐标上最近的物理形状
PhysicsShape * getShape(const Vec2 &point);
  • 设置物理世界的调试绘制掩码 : 显示物理世界调试状态,显示红色的框,方便调试
void setDebugDrawMask(int mask);
    DEBUGDRAW_NONE :什么都不绘制
    DEBUGDRAW_SHAPE :绘制形状
    DEBUGDRAW_JOINT :绘制关节
    DEBUGDRAW_CONTACT :绘制碰撞
    DEBUGDRAW_ALL : 都绘制
  • 控制物理迭代的方法
void setAutoStep(bool autoStep); 
// 如果设置False的话,那么setSpeed和setSubsteps,以及setUpdateRate函数都不能正常工作了
// 如果为false,那么刚体将停止不动。
  • 物理世界的默认属性
 _gravity(Vec2(0.0f, -98.0f)) : 98cm/s2
, _speed(1.0f)
, _updateRate(1)
, _updateRateCount(0)
, _updateTime(0.0f)
, _substeps(1)
, _cpSpace(nullptr)
, _updateBodyTransform(false)
, _scene(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值