簡體   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