繁体   English   中英

Box2D物体无缘无故移动?

[英]Box2D bodies moving for no reason?

我在我的应用程序中将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发生碰撞时(从技术上讲,我的b2Body也会发生碰撞),每个CCSprite上的b2Body似乎都会移动一点,好像有很小的力击中了它,如果有意义,它们就会产生“反冲”。 即使不涉及任何力量,当发生打击时,它们也会彼此远离。

另一个例子是,当我的一个身体坐在另一个身体的顶部时,当我站在它的边缘时,站立的身体似乎有些倾斜,这很奇怪,因为我不倾斜小精灵。

最后,我的身体似乎在那个特定时刻的子画面还有些落后,我不确定这是否也与此问题有关,但是无论如何,有什么理由会发生这种情况? 有什么方法可以使车身不受力影响而仅用于碰撞?

谢谢!

我相信这些物体在碰撞时会触发碰撞反应,这会导致它们暂时分开一点,然后在您迫使其b2transforms在下一个游戏滴答中与精灵的位置/角度同步时重新回到位置。

由于您仅将Box2D用于冲突检测,您是否将夹具定义的isSensor属性设置为true?

b2FixtureDef shapeDef;
shapeDef.isSensor = true;

通过将灯具专门标记为传感器,它永远不会与任何物体发生碰撞,但是当物体重叠时,仍会通过接触侦听器通知您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM