Назначение текстур объекту Box2D

Я недавно начал работать с box2d, и сейчас у меня проблема с отрисовкой box2d. Прямо сейчас мои коробки нарисованы только граничными линиями. Но я хочу рисовать текстуры там, где существует коробка.

Хотя я не уверен, что правильно назначать текстуру box2d или рисовать текстуру с помощью Sprite поверх коробки.

Есть ли способ назначить текстуру box2d? или другой способ рендеринга текстур при использовании box2d?


person user1234714    schedule 27.02.2012    source источник
comment
обычно физика и графика выполняются отдельно, и графика рисует собственный спрайт с учетом положения и угла физического объекта (или по матрице модели, если он в 3D).   -  person Robert Rouhani    schedule 27.02.2012


Ответы (2)


Есть в основном два подхода к этому, которые я использовал.

  1. В классе GameManager/GameWorld реализуйте метод update/tick, который вызывается в каждом кадре. После вызова world->Step(delta, 10, 10); выполните цикл по всем телам в мире и обновите положение их спрайтов. Обратите внимание, что при создании тел многие будут использовать элемент body.userData для хранения указателя на спрайт, «прикрепленный» к этому телу.

    for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) 
    {
      if (b->GetUserData() != NULL) {
        CCSprite *spriteData = (CCSprite *)b->GetUserData();
        spriteData.position = ccp(b->GetPosition().x * PTM_RATIO,b->GetPosition().y * PTM_RATIO);
        spriteData.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
      }
    }
    
  2. Скажем, у вас есть объект с классом player. Вы можете реализовать метод галочки/обновления в этом классе, который обновляет собственный спрайт с позицией тела... например:

    [self setPosition:ccp(body->GetPosition().x * PTM_RATIO, body->GetPosition().y * PTM_RATIO)];
    

Вам понадобится указатель на b2_body и добавить этот экземпляр в CCLayer, где реализовано основное обновление/галочка/шаг.

person Jer In Chicago    schedule 28.02.2012

Вы должны найти фактическое положение тела, например, в методе рендеринга вы реализуете следующие вещи, чтобы найти положение тела и прикрепить к нему текстуру.

ballPosition = ballBody.getPosition();

и примените позицию к текстуре, нарисованной на экране

person Siddharth    schedule 04.04.2012