"唤醒"对b2Body :: ApplyLinearImpulse有什么影响?

Kai*_*zay 5 box2d

我正在使用Box2d v2.3以下box2d方法需要一个bool"唤醒":

inline void b2Body::ApplyLinearImpulse(const b2Vec2& impulse, const b2Vec2& point, bool wake)
Run Code Online (Sandbox Code Playgroud)

它有什么作用?无论我将其设置为YES还是NO,它对我的​​物理学似乎没有明显的影响.

早期版本的Box2d不接受布尔 - 他们只是冲动和指向.

编辑:同样,以下方法也是如此:

inline void b2Body::ApplyForce(const b2Vec2& force, const b2Vec2& point, bool wake)
Run Code Online (Sandbox Code Playgroud)

noo*_*one 5

摘自Box2D官方手册:

睡眠是什么意思?好吧,模拟身体的成本很高,所以我们需要模拟的越少越好。当身体静止时,我们希望停止模拟它。

当 Box2D 确定一个物体(或一组物体)已经静止时,身体进入睡眠状态,CPU 开销很小。如果一个身体醒着并与一个睡着的身体发生碰撞,那么这个睡着的身体就会醒来。如果连接到它们的关节或触点被破坏,它们也会被唤醒。您也可以手动唤醒身体。

所以 sleepmode 是一种提高性能的方法。唤醒一个物体是有意义的,当你对它施加一个力时,所以如果它还没有醒来,它会被唤醒并被模拟,因为这就是你可能想要的。

如果它已经醒了,也没关系。它不会被设置为与wake=false它一起睡觉并再次唤醒它,不会改变任何东西。为了安全起见,您应该始终使用wake=true. 在最坏的情况下,它会稍微影响性能,但只会影响一小会儿。然后 Box2D 无论如何都会让它重新进入睡眠状态。