gpt4 book ai didi

ios - Box2D 物体无缘无故移动?

转载 作者:行者123 更新时间:2023-11-28 20:27:54 25 4
gpt4 key购买 nike

我在我的应用程序中使用 Box2D 和 Cocos2D。所以在我的应用程序中,我几乎让 body 跟随我的 CCSprite,即使人们反对它。此外,我只使用 Box2D 进行碰撞检测,所以我只将一个主体附加到我的 Sprite 上并使用 b2ContactListener 和什么都没有。无论如何,除了这个小问题之外,此设置在大多数情况下都有效。

所以我的 body 在游戏循环中像这样跟随我的 Sprite :

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 发生碰撞时(从技术上讲,我的 b2Body 也会发生碰撞),每个 CCSprite 上的 b2Body 似乎都会移动一点,就好像有一个微小的力刚刚击中它,所以如果这是有道理的话,它们会有一个“后坐力”。当撞击发生时,即使不涉及任何力,它们也会彼此远离。

另一个例子是,当我的一个 body 坐在另一个 body 上面时,当我站在它的边缘时,我站在上面的 body 似乎有点倾斜,这很奇怪,因为我没有倾斜我的 Sprite 。

最后,我的 body 似乎有点落后于 Sprite 在那一刻的位置,我不确定这是否也与这个问题有关,但无论如何有什么原因会发生这种情况吗?有什么方法可以使物体不受力的影响而仅用于碰撞吗?

谢谢!

最佳答案

我相信 body 会在碰撞时触发碰撞响应,这会导致它们暂时分开一点,然后在您强制它们的 b2transform 与下一个游戏刻度中 Sprite 的位置/角度同步时迅速回到原位。

由于您将 Box2D 纯粹用于碰撞检测,您是否将夹具定义的 isSensor 属性设置为 true?

b2FixtureDef shapeDef;
shapeDef.isSensor = true;

通过将固定装置特别标记为传感器,它永远不会与任何物体发生物理碰撞,但当物体发生重叠时,您仍然会通过接触监听器收到通知。

关于ios - Box2D 物体无缘无故移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13355629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com