Обновите позицию CCSprite, когда b2Body движется? - PullRequest
1 голос
/ 04 ноября 2011

В моей игре Box2d я обнаружил, что я должен обновить свою позицию CCSprite в игровом цикле, чтобы она работала правильно.Я просмотрел документы Box2D, чтобы узнать, какие есть API для получения координат b2Body, но я ничего не видел, и это кажется неясным.Должен ли я перемещать каждый 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);
        }
    }

1 Ответ

3 голосов
/ 04 ноября 2011

просто сделайте это:

В вашем расписании занятий по инициации метод тика, как этот

[self schedule: @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());
     }

}

...