文章目录
  1. 1. 刚体
    1. 1.1. 刚体定义(b2BodyDef)
  2. 2. 由形状到刚体
    1. 2.1. b2BodyDef
    2. 2.2. 返回总目录

本节主要介绍刚体的一些属性,以及从形状到刚体的过程。

刚体


刚体定义(b2BodyDef)

在创建刚体之前你需要创建一个刚体定义(b2BodyDef)。你可以把刚体定义创建在栈上,也可以在你的游戏数据结构中保存它们。这取决于你的选择。
Box2D会从刚体定义中拷贝出数据,这意味着你可以循环使用一个刚体定义去创建多个刚体。

  • 质量性质

有多种建立刚体质量性质的方法:

  1. 在刚体定义中显式地设置
  2. 显式地在刚体上设置(在其创建之后)
  3. 基于刚体上形状之密度设置
    在很多游戏环境中,根据形状密度计算质量是有意义的。这能帮助确保刚体有合理和一致的质量。然而,其它游戏环境可能需要指定质量值。例如,可能你有一个机械装置,需要一个精确的质量。
  • 位置和角度

物体定义为你提供了一个在创建时初始化位置的机会,这要比在世界原点创建物体而后移动它到某个位置更具性能。

一个物体上主要有两个令人感兴趣的点。其中一个是物体的原点,形状和关节都相对于物体的原点而被附加。另一个点是物体的质心。质心取决于物体上形状的质量分配,或显式地由b2MassData设置。
Box2D内部的许多计算都要使用物体的质心,例如b2Body会存储质心的线速度。

1
bodyDef.position.Set(x, y); // 设置刚体的初始位置

当你构造物体定义的时候,可能你并不知道质心在哪里,因此你会指定物体的原点。你可能也会以弧度指定物体的角度,角度并不受质心位置的影响。
如果随后你改变了物体的质量性质,那么质心也会随之移动,但是原点以及物体上的形状和关节都不会改变。

  • 阻尼

阻尼用于减小物体在世界中的速率。阻尼与摩擦是不同的,因为摩擦仅在物体有接触的时候才会发生,而阻尼的模拟要比摩擦便宜多了。然而,阻尼并不能取代摩擦,往往这两个效果需要同时使用。

阻尼参数的范围可以在0到无穷之间,0的就是没有阻尼,无穷就是满阻尼。通常来说,阻尼的值应该在0到0.1之间,我通常不使用线性阻尼,因为它会使物体看起来发飘。

1
2
bodyDef.linearDamping = 0.0;
bodyDef.angularDamping = 0.01;

阻尼相似于稳定性与性能,阻尼值较小的时候阻尼效应几乎不依赖于时间步,而阻尼值较大的时候阻
尼效应将随着时间步而变化。

  • 休眠参数

休眠是什么意思?好的。模拟物体的成本是高昂的,所以如果物体更少,那模拟的效果就能更好。当一个物体停止了运动时,我们喜欢停止去模拟它。

当Box2D确定一个物体(或一组物体)已经停止移动时,物体就会进入休眠状态,消耗很小的CPU开销。如果一个醒着的物体接触到了一个休眠中的物体,那么休眠中的物体就会醒来。当物体上的关节或触点被摧毁的时候,它们同样会醒来。你也可以手动地唤醒物体。
通过物体定义,你可以指定一个物体是否可以休眠,或者创建一个休眠的物体。

1
2
bodyDef.allowSleep = true;
bodyDef.isSleeping = false;

由形状到刚体


b2BodyDef

之前虽然创建了形状,但是这些形状并不会直接在世界里面显示出来。

下面利用这些形状来组成一些刚体,然后把它们放入到世界里面去。

首先,利用b2BodyDef创建一个刚体,然后设置刚体的初始位置并加入之间已创建的形状,然后使用CreateBody将刚体放入到世界里面,这样就可以看到一些模拟刚体了。

1
2
3
4
var BodyDef= new b2BodyDef();   // 利用b2BodyDef类创建一个刚体
BodyDef.position.Set(0, 600); // 设置刚体的初始位置,这里把BodyDef放在(0,600)
BodyDef.AddShape(Shape); // 在刚体BodyDef中加入形状Shape
Body= world.CreateBody(BodyDef); // 把刚体BodyDef放到world中

返回总目录

码生艰难,写文不易,给我家猪囤点猫粮了喵~

B站: 被删

查看Github有更多内容噢:https://github.com/godbasin
更欢迎来被删的前端游乐场边撸猫边学前端噢

如果你想要关注日常生活中的我,欢迎关注“牧羊的猪”公众号噢

作者:被删

出处:https://godbasin.github.io

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

文章目录
  1. 1. 刚体
    1. 1.1. 刚体定义(b2BodyDef)
  2. 2. 由形状到刚体
    1. 2.1. b2BodyDef
    2. 2.2. 返回总目录