Я создаю 2D-игру. Я реализовал в игре физический движок, поэтому, когда игрок прыгает, его дуга следует по траектории с учетом его скорости и силы тяжести в игре. Когда игрок падает, его расстояние будет продолжать увеличиваться и увеличиваться, потому что у него есть ускорение.
Как мне узнать, сталкивается ли игрок с чем-то на своем пути, если в новом месте он оказывается с другой стороны объекта?
Я мог бы использовать цикл и проверять каждую точку на пути игрока. Это единственный способ сделать это? Есть ли более элегантный алгоритм или решение pygame?
Ответ 1 · рейтинг 1 · ajwood
Одно из решений - добавить невидимый хвост напротив вашего вектора скорости, достаточно длинный, чтобы компенсировать большие расстояния, пройденные между кадрами.
Ответ 2 · рейтинг 1 · Mark Hildreth
Боюсь, что сам Pygame не сможет вам помочь. В нем есть API, который поможет вам определить, пересекаются ли прямоугольники, но, как вы обнаружили, если объект движется достаточно быстро, он может быть на одной стороне земли при одном обновлении, а при следующем обновлении быть четким на другом. боковая сторона. Иногда это называют "туннелированием".
Самый простой способ исправить это: не позволяйте своим сущностям перемещаться достаточно быстро, чтобы двигаться сквозь землю (или другую сущность). Вы можете применить к падающему объекту "предельную скорость" или увеличить частоту обнаружения столкновений.
Для решения этой проблемы существуют более сложные алгоритмы, обычно называемые "алгоритмами непрерывных столкновений", но они более сложные. В Интернете по этим алгоритмам доступно огромное количество информации, поэтому я оставлю ее вам для исследования, если хотите.