1

在我的 Box2d 游戏中,我发现我必须在游戏循环中更新我的 CCSprite 位置才能正常工作。我查看了 Box2D 文档以了解获取 b2Body 坐标的 API,但我什么也没看到,这似乎不清楚。我应该手动移动每个 CCSprite,还是有一种简单的方法可以将屏幕上的所有 CCSprite 移动到与它们关联的 b2Bodys 上?

有谁知道如何做到这一点?

谢谢!

编辑1: 这段代码是否会将我世界中的每个精灵更新为与它们对应的 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

只需这样做:

在您的初始化课程安排中,像这样的滴答方法

[自我计划:@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 回答