Чтобы получить позицию спрайта из bodyDef box2d, вы сначала должны сохранить свой спрайт в свойстве userData bodyDef.
Например, в фабричном методе, который создает шар в физикеenvironment:
//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, который возвращает спрайт, который мы сохранили ранее.Обратите внимание, что мы должны привести приведенные userData, иначе он вернет ошибку.Как только мы сохраним спрайт, все, что нам нужно сделать, - это вызвать свойство position нашего указателя mySprite.Вот и все.