Обновите позицию CCSprite, когда b2Body движется?
В моей игре 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 ответ
Решение
Просто сделайте это:
В вашем расписании занятий по инициации такой метод галочек
[собственный график: @selector(тик:));
-(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());
}
}