Помогите мне с примером кода для получения позиции спрайта в Box2d на iPhone.
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. Вот и все.
Похожие вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].