Распознать контакт только в нижней части круга.Cocos2d с Box2d - PullRequest
1 голос
/ 31 октября 2011

Я делаю платформенную игру для iPad и iPhone, используя Cocos2d и Box2d. Я добавляю некоторые специальные функции для прыжков, и мне нужно знать, когда моему персонажу должно быть разрешено прыгать.

В настоящее время я использую ContactManager для проверки столкновений между игроком (кругом) и другими объектами. Таким образом, я могу сказать своему персонажу, что ему разрешено прыгать только тогда, когда он контактирует с другим объектом.

Проблема в том, что я не хочу, чтобы он мог прыгать со стен ... Я хочу знать, находится ли мой персонаж в контакте с другим объектом в нижней части моего круга! Он должен быть в состоянии прыгать только тогда, когда его ноги лежат на земле. Не его лицо ...

Как мне подойти к этому?

Ответы [ 2 ]

3 голосов
/ 01 ноября 2011

Вы можете прикрепить небольшой датчик к нижней части персонажа и проверить его на наличие столкновений.http://www.iforce2d.net/b2dtut/jumpability

1 голос
/ 31 октября 2011

Вы можете получить список точек контакта следующим образом:

b2Manifold* manifold = contact->GetManifold();
for (int i = 0; i < manifold.pointCount; i++)
{
   b2ManifoldPoint point = manifold.points[i];
   // rest see text …
}

Теперь теоретически все, что вам нужно сделать, это проверить, есть ли хотя бы одна точка в самой нижней области круга вашего игрока.,Это означает, что если позиция x точки контакта находится в диапазоне примерно плюс / минус половины радиуса круга, а позиция y меньше, чем позиция y тела круга, то вы столкнулись с кругом где-то на уровне земли.

...