Если вы используете пандовский CollisionHandlerPusher для обработки столкновений, то старайтесь избегать острых углов в вашей геометрии, предназначенной для коллизий. На рисунке я попробовал показать почему. Пушер для расчёта реакции на столкновение использует нормаль поверхности с которой столкнулся. В случае "А" всё просто - мы движемся по плоской поверхности, реакция этой поверхности представлена единственным вектором. Результирующее движение - сумма желаемого перемещения и реакции поверхности. Но вот мы наткнулись на угол "Б" - теперь пушер видит две нормали (может и больше) и реакцию поверхности рассчитывает как сумму этих нормалей. Вроде бы всё хорошо, но есть одно "но" - когда мы наконец проходим угол, одна из составляющих нормалей исчезает, и вектор реакции меняет своё направление, как резко - зависит от угла который мы проходим. Чем острее угол, тем резче смена вектора, так что становится заметен рывок объекта, причём порой довольно ощутимый. При тупых углах этот "артефакт" значительно менее заметен. Вот поэтому при создании геометрии для коллизий нужно стараться избегать острых углов, например делать фаски.
|