アプリで 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 は小さな力が当たったかのように少し動くように見えるため、意味がある場合は「反動」があります。力が関係していなくても、ヒットが発生すると、それらは互いに遠ざかります。
もう 1 つの例は、私の体の 1 つが別の体の上に座っている場合です。立っている体は、私がその端にいるときに少し傾いているように見えます。これは、スプライトを傾けていないため、奇妙です。
最後に、私の体はスプライトがその瞬間にどこにいるのか少し遅れているように見えます。それがこの問題に関連しているかどうかはわかりませんが、とにかくこれが起こる理由はありますか? ボディが力の影響を受けず、衝突のみに使用されるようにする方法はありますか?
ありがとう!