Получение контактных точек на телах в Cocos2d & Box2d - PullRequest
3 голосов
/ 17 февраля 2011

Я очень новичок для Cocos2d и Box2d, я были следующие учебные пособия и вообще взлом. Тем не менее, у меня есть один проблема, которую я не могу решить.

Я создаю 2 тела и приспособления (в мире Box2d) и создаю объект «Слушатель контактов». Этот объект хранит список контактов вместе с «точкой контакта».

Когда два тела сталкиваются, сообщается о точке контакта, но это (я думаю) в мировой системе координат.

Моя проблема в том, что я не могу преобразовать точку контакта в полезную координату на обоих тел.

Я хочу добавить изображение трещины в спрайт (связанный с телом) на точка контакта на обоих органы / приспособления.

Кто-нибудь решил это? Возможно, я храню «точку контакта» относительно «мира» - совершенно неверный путь.

Ответы [ 2 ]

6 голосов
/ 07 февраля 2012

Вот как получить мировую точку (или очки, возвращаются максимум 2 точки), где произошло столкновение.Внутри вашего B2ContactListener объекта, в BeginContact или EndContact функциях:

b2WorldManifold worldManifold;
contact->GetWorldManifold(&worldManifold);
std::cout << "Contact point X: " << worldManifold.points[0].x * Ascengine::Physics::PIXEL_TO_METER_RATIO << " Contact point Y: " << worldManifold.points[0].y  * Ascengine::Physics::PIXEL_TO_METER_RATIO << std::endl;

Здесь, как упоминал Джейсон F, вы можете затем использовать b2Body::GetLocalPoint(const b2Vec2 &worldPoint) для преобразования этой точки мира в локальное пространство объектов,Я просто хотел добавить свой собственный ответ, чтобы включить всю часть о том, как получить точки соприкосновения с миром, поскольку в принятом ответе это, похоже, вообще не учитывается.

3 голосов
/ 21 февраля 2011

проверить это .Взгляните на b2Body::GetLocalPoint(const b2Vec2 &worldPoint)

...