Wohlstand
@Wohlstand
Инженер-программист С++

С++, Box2d: Как исправить спотыкание об углы блоков?

Есть персонаж-прямоугольник, который умеет ходить, бегать и прыгать.
3050a830ae8b49899220ca214f05c10b.PNG
Весь игровой мир состоит преимущественно из блоков одинакового размера (некоторые из них могут быть треугольными (склоны) или в редких случаях повторять текстуру по форме)

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

Одновременно с этим, я хочу научить персонажа переходить с блока на блок если он движется с достаточной скоростью:
0c570364667844e49a08771e46640a47.PNG

Но это невозможно даже на сверх скорости, персонаж всё равно спотыкается и падает между блоками
0fcfbd459e8c4b0cb0e0ca6572e98fa8.PNG

Я предполагаю, что мне нужно добавить модификацию в проверку столкновений и поднимать персонажа до уровня блока, если он врезался в блок на глубину, например, в 3-5 пикселей (0.3-0.5 метров) при скорости не менее одного метра в секунду (в любом направлении).

Делать закруглённые углы фигуре персонажу помогло, но я не хочу прибегать к этому выходу, потому что персонажу нужно цепляться за угол блока не соскальзывая с обрыва.
  • Вопрос задан
  • 2315 просмотров
Пригласить эксперта
Ответы на вопрос 1
@mamkaololosha
Box2D умеет только столкнуть 2 фигуры и всё. Дальше включайте мозги.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы