我在我的应用程序中使用 Box2D 和 Cocos2D。所以几乎在我的应用程序中,我让身体跟随我的 CCSprites,即使人们反对它。此外,我只使用 Box2D 进行碰撞检测,所以我只是将一个身体附加到我的精灵上,然后使用 b2ContactListener 并没有别的。无论如何,除了这个小问题之外,这个设置大部分都有效。
所以我的身体在游戏循环中像这样跟随我的精灵:
for(b2Body *b = world->GetBodyList(); b; b=b->GetNext()) {
if (b->GetUserData() != NULL) {
CCSprite *sprite = (CCSprite *)b->GetUserData();
b2Vec2 b2Position = b2Vec2(sprite.position.x/PTM_RATIO, sprite.position.y/PTM_RATIO);
float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(sprite.rotation);
b->SetTransform(b2Position, b2Angle);
}
}
我也像这样创建我的 b2World (如果有什么不同的话):
world = new b2World(b2Vec2(0.0f, 0.0f));
world->SetAllowSleeping(NO);
_contactListener = new MyContactListener();
world->SetContactListener(_contactListener);
这个问题是,每当我的 CCSprite 发生碰撞(从技术上讲,我的 b2Bodys 也在发生碰撞)时,每个 CCSprite 上的 b2Body 似乎会移动一点,就好像一个微小的力刚刚击中它一样,所以如果这是有道理的,它们就会有“后坐力”。即使不涉及任何力量,当击中发生时,它们也会彼此远离。
另一个例子是当我的一个身体坐在另一个身体的顶部时,当我站在它的边缘时,站立的身体似乎有点倾斜,这很奇怪,因为我没有倾斜我的精灵。
最后,我的身体似乎有点落后于精灵在那一刻的位置,我不确定这是否也与这个问题有关,但无论如何有什么理由会发生这种情况吗?有什么办法可以使身体不受力的影响并且仅用于碰撞?
谢谢!