物理引擎

1.世界(b2World)


控制地球的宇宙,创建物质(刚体)
b2Vec2 gravity = b2Vec2(0.0f, -10.0f)
b2World *world = new b2World(gravity)
ClearForces() 清除所有作用在刚体上的作用力
DrawDebugData() 具体不知道
CreateBody 确定了刚体的基本属性,由世界创建刚体
DestroyBody 销毁刚体
Step 迭代时间按照2dx的update帧率,位置和速度迭代一般设置10,(更新物理时间频率)
遍历世界中的刚体
for (b2Body *body = world->GetBodyList(); body != NULL; body = body->GetNext()){}


2.刚体(b2Body)


刚体 = 固体属性 + 基本属性 + 其他
刚体本身可以改变这两个属性
CreateFixture 刚体绑定自身的固体属性
SetLinearVelocity(pos) 从刚体现在位置线性运动到pos速度与冲量和重力加速度有关
SetGravityScale(10) 刚体重力加速度
SetMassFromShapes 方法来命令物体通 过形状去计算其自身的质量。

1.刚体类型

1.一个static类型的刚体不受任何力,冲量或撞击的影响并且不会移动。它只能通过用户手动移动。默认情况下,所有的Box2D刚体都是static类型的刚体。一个static类型的刚体不会和别的static或kinematic类型的刚体发生碰撞。

2.一个dynamic类型的刚体受力,冲量,撞击以及任何世界事件的影响。它可以通过手动移动,也可以通过世界的重力,和任何类型刚体的碰撞来移动。

3.一个kinematic类型的刚体是一个介于static和dynamic刚体之间的混合刚体。它不受力的影响,但是可以通过手动和设置它们的速率来移动。它不能和static和kinematic类型的刚体碰撞

冲量:用手快速移动一个物体,松开后物体可以继续前行一段距离

刚体固体属性(b2FixtureDef 关联):决定刚体形状和一些物理性质
1.形状(shape) 决定刚体的形状(多边形,圆。。。)
2.密度(density) 用来设置刚体的质量,按照千克每立方米。越大的密度意味着越重的刚体,并且该值不能为负。
3.摩擦(friction) 在两个刚体在彼此的表面上移动时产生,它是通过一个系数来定义的,通常它的范围在0到1之间(0表示没有摩擦)。
4.弹性(restitution)决定刚体在发生碰撞时反弹的程度。与密度(density)和摩擦(friction)一样,它不能为负数,范围在0到1之间。一个弹性为0的小球,落向地面时,不发生反弹(无弹性碰撞),反之弹性为1的小球落向地面时,将会以此刻撞击时相同的速率弹起(完全弹性碰撞)。
5.传感器(isSensor) 可以相互穿越的物体,在接触时要处理一些事件,isSensor设为 true

形状
1.b2PolygonShape:多边形
SetAsBox设置宽高。
2.b2CircleShape:圆
m_radius半径
刚体基本属性(b2BodyDef)
position.Set 位置
type 类型
userData 2dx的精灵指针赋值,确定刚体对应的精灵
angle 角度
linearVelocity.Set 线性速度运行位置(不是直线运动)
bullet 子弹类型,一些高速运动的物体防止穿过其他物体,性能有所下降
gravityScale 重力加速度扩大多少倍


3.基础


1.注册点
Box2D的注册点是中心,而不是左上角
2.绘图(debug draw)时的不同颜色
static类型的刚体将会绘制成绿色。dynamic类型的刚体,当它们没有在睡眠状态时将会绘制成红色,在睡眠状态时将会绘制成灰色。kinematic类型的刚体,它将会被显示为蓝色
3.向量 b2Vec2
4.约束
一个约束就是消除物体自由度的物理连接,自由度(x方向、y方向、角度)

创建世界万物:
先有了世界,经过一段时间世界生长一些基础属性,创建刚体。刚体经过自身修炼有了固体属性,从此驰骋宇宙。


4.版本2dx-3.0物理引擎


cocos2dx-3.0把box2d融合到2dx里了,精灵里附有刚体,scene里附有刚体。。。
1.不规则的图片刚体(用工具)
float offx = - pNode->getAnchorPoint().x * pNode->getContentSize().width;
float offy = - pNode->getAnchorPoint().y * pNode->getContentSize().height;
2.判断是否触摸到不规则精灵刚体
auto scene = Director::getInstance()->getRunningScene();
auto arr = scene->getPhysicsWorld()->getShapes(pos); 此点的刚体数组
for (auto& obj : arr) 查看刚体的附体是那个精灵
{
auto sprite = obj->getBody()->getNode();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值