Изменить столкновение игрока (b2PolygonShape) во время выполнения и сохранить положение тела - PullRequest
0 голосов
/ 26 октября 2011

У меня есть главный герой в моей Box2d игре с столкновением b2PolygonShape.Когда игрок приседает, я меняю тело на меньшее b2PolygonShape.Логика работает нормально, но когда я меняю размер (высоту) столкновения, персонаж начинает падать.

Можно ли создать новое тело со смещением (localPosition?), Чтобы положение тела оставалось прежним?Таким образом, я могу воспроизвести анимацию приседания и изменить столкновение, не беспокоясь о том, что позиция изменится, и мой спрайт станет бананом.

enter image description here

1 Ответ

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

Прошло много времени с тех пор, как я использовал Box2D, но я считаю, что у меня есть решение для вас.

Вы можете создать еще один b2PoligonDef, используя b2PolygonDef.SetAsOrientedBox (он позволяет вам установить центр прямоугольника), и изменять формы, как вы делаете сейчас, приседая и стоя.

Так что, если раньше вы использовали определение крадущегося поля как shapeDef.SetAsBox (1.0, 1.0), теперь вы бы изменили его на что-то вроде shapeDef.SetAsOrientedBox (1, 1, новый b2Vec2 (0, -1)) .

Другим вариантом было бы объявить вершины самостоятельно, чтобы вы могли сделать что-то вроде:

shapeDef.vertexCount = 4;
shapeDef.vertices[0].Set(-0.5, 0);
shapeDef.vertices[1].Set( 0.5, 0);
shapeDef.vertices[2].Set( 0.5,  1);
shapeDef.vertices[3].Set(-0.5,  1);
...