b2Body陷入静止的身体

时间:2012-12-11 00:59:22

标签: cocos2d-iphone box2d box2d-iphone

我有两个静态物体,一个在另一个之上。
当我将顶部的一个切换到动态时,它会在恢复之前沉入静态一秒钟。

_boxBody->SetType(b2_dynamicBody);
_boxBody->SetAwake(true);

为什么会这样?我该如何预防呢?非常烦人。

1 个答案:

答案 0 :(得分:0)

这可能是因为静态物体不会碰撞,所以它们之间没有接触,直到它们变为动态。不幸的是,建立联系需要一个步骤,在这个时间步骤中,引力也有机会采取行动。

你可以通过在第一步使动态物体的重力比例为零来避免这种情况,但我认为更好的方法是在踩踏之前在动态物体的固定装置上调用Refilter。

for (b2Fixture* f = body->GetFixtureList(); f; f = f->GetNext())
    f->Refilter();

(我实际上并没有尝试过这个,但我认为这就是Refilter功能的用途。)