Помогите мне с примером кода для получения позиции спрайта в Box2d на iPhone.

-1
kavitha 23 Мар 2011 в 07:23

1 ответ

Чтобы получить позицию спрайта из box2d bodyDef, вы должны сначала сохранить свой спрайт в свойстве userData bodyDef.

Например, в фабричном методе, который создает мяч в физической среде:

    //create the body
    b2BodyDef initBodyDef;

    initBodyDef.type = b2_dynamicBody;
    initBodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);

    //Save the sprite in the userData property of the bodyDef, to access later
    initBodyDef.userData = ballSprite;

    b2Body *body = world->CreateBody(&initBodyDef);

    //Rest of the factory method ............ (i.e. create shape, create fixture)

Затем, когда вы хотите получить доступ к положению спрайта, например, при обнаружении столкновений, вы получите указатель на спрайт в свойстве userData bodyDef:

Это может быть в методе тиков (где происходит обнаружение столкновений) или в любом другом месте, где вам нужно получить положение спрайта.

    CCSprite *mySprite = (CCSprite *) bodyDef->GetUserData();

    CGPoint spritePosition = mySprite.position;

В первой строке кода выше мы создаем объект спрайта и вызываем метод GetUserData для нашего bodyDef, который возвращает ранее сохраненный спрайт. Обратите внимание, что мы должны преобразовать возвращенные данные пользователя, иначе будет возвращена ошибка. Как только мы сохранили спрайт, все, что нам нужно сделать, это вызвать свойство position для нашего указателя mySprite. Вот и все.

0
SteveWight 29 Мар 2011 в 11:41