Обнаружение столкновений Pygame при ускорении

Я создаю 2D-игру. Я реализовал в игре физический движок, поэтому, когда игрок прыгает, его дуга следует по траектории с учетом его скорости и силы тяжести в игре. Когда игрок падает, его расстояние будет продолжать увеличиваться и увеличиваться, потому что у него есть ускорение.

Как мне узнать, сталкивается ли игрок с чем-то на своем пути, если в новом месте он оказывается с другой стороны объекта?

Я мог бы использовать цикл и проверять каждую точку на пути игрока. Это единственный способ сделать это? Есть ли более элегантный алгоритм или решение pygame?


person user1426902    schedule 10.07.2012    source источник


Ответы (2)


Одно из решений - добавить невидимый хвост напротив вашего вектора скорости, достаточно длинный, чтобы компенсировать большие расстояния, пройденные между кадрами.

person ajwood    schedule 10.07.2012

Боюсь, что сам Pygame не сможет вам помочь. В нем есть API, который поможет вам определить, пересекаются ли прямоугольники, но, как вы обнаружили, если объект движется достаточно быстро, он может быть на одной стороне земли при одном обновлении, а при следующем обновлении быть четким на другом. боковая сторона. Иногда это называют «туннелированием».

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

Для решения этой проблемы существуют более сложные алгоритмы, обычно называемые «алгоритмами непрерывных столкновений», но они более сложные. В Интернете по этим алгоритмам доступно огромное количество информации, поэтому я оставлю ее вам для исследования, если хотите.

person Mark Hildreth    schedule 10.07.2012