0

什么是 levelhelper 中使用的“子弹”属性?还有,在愤怒的小鸟这样的游戏中,小鸟在春天重装上阵……如何保持计数?以及如果我使用 levelhelper 制作类似愤怒的小鸟的游戏,如何在春天重新加载子弹。

4

1 回答 1

1

来自 box2d 手册http://www.box2d.org/manual.html

子弹

游戏模拟通常会生成一系列以某种帧速率播放的图像。这称为离散模拟。在离散模拟中,刚体可以在一个时间步长内大量移动。如果物理引擎不考虑大运动,您可能会看到一些对象错误地相互穿过。这种效应称为隧道效应。

默认情况下,Box2D 使用连续碰撞检测 (CCD) 来防止动态物体穿过静态物体。这是通过将形状从旧位置扫到新位置来完成的。引擎在扫描期间寻找新的碰撞并计算这些碰撞的碰撞时间 (TOI)。物体被移动到它们的第一个 TOI,然后在剩余的时间步长内停止。

通常动态物体之间不使用CCD。这样做是为了保持性能合理。在某些游戏场景中,您需要动态物体才能使用 CCD。例如,您可能想在一堆动态砖块上发射高速子弹。如果没有 CCD,子弹可能会穿过砖块。

Box2D 中快速移动的物体可以被标记为子弹。Bullets 将对静态和动态物体执行 CCD。你应该根据你的游戏设计决定哪些身体应该是子弹。如果您决定将身体视为子弹,请使用以下设置。

bodyDef.bullet = true;

子弹标志只影响动态物体。

Box2D 顺序执行连续碰撞,因此子弹可能会错过快速移动的物体。

于 2012-08-17T14:13:21.077 回答