Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: user1426902Ответов: 2

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

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

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

pygame

Ответы

Ответ 1 · рейтинг 1 · ajwood

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

Ответ 2 · рейтинг 1 · Mark Hildreth

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы