1

Box2d ゲームで、正しく動作するようにゲーム ループ内の CCSprite の位置を更新する必要があることがわかりました。Box2D ドキュメントを調べて、b2Body 座標を取得するための API を確認しましたが、何も表示されず、不明なようです。各 CCSprite を手動で移動する必要がありますか、または画面上のすべての CCSprite をそれらに関連付けられた b2Bodys に移動する簡単な方法はありますか?

これを行う方法について誰か考えがありますか?

ありがとう!

Edit1: このコードは、私の世界のすべてのスプライトをそれらに対応する b2Body に更新するだけですか? そして、これは x 軸と y 軸と正しい回転で動作しますか?

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);
        }
    }
4

1 に答える 1

3

これを行うだけです:

init クラスのスケジュールでは、このような tick メソッドをスケジュールします

[セルフスケジュール: @selector(tick:)];

-(void)tick: (ccTime) dt


 for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
 {
     if (b->GetUserData() != NULL)
     {
         CCSprite *spr= (CCSprite*)b->GetUserData();
         CCSprite *myActor = (CCSprite*)b->GetUserData();
         myActor.position = CGPointMake( b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO);
         myActor.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
     }

}

于 2011-11-04T07:52:06.423 に答える