Collision Detection для начинающих

Collision Detection для начинающих
Collision Detection

Одной из важнейших тем в Game Development индустрии является Collision Detection – детектор столкновения, иными словами. Наверняка многие сталкивались с ситуацией при который вы, или NPC проваливается через текстуры, проходит через стены и так далее. Это — результат неправильно написанных методов Collision Detection. Так как же написать правильный и качественный метод детектора столкновения?

 Первым и основным понятием, необходимым для написания метода, является Collision Mask – маска столкновения. Обычно, она совпадает со спрайтом (в случае двумерной игры) или с полигональной моделью (в случае трехмерной игры), но зачастую, дабы сэкономить вычислительные ресурсы, разработчики используют в качестве маски приблизительный контур спрайта или модели. В любом случае, для написания метода, вам понадобится задать вашим объектам маски столкновения.

 Далее все зависит от модели движения ваших объектов. Основной функцией, которую нужно использовать на этом этапе, можно условно обозначит place_meeting, заданную в любом из объектов, в качестве переменных использующей координаты объекта, в котором функция задана, и id объекта, с которым вы хотите проверить ваш объект на столкновение. Тут начинаются сложности — в случае, например, если мы хотим, чтобы при падении сверху вниз наш объект не проваливался через объекты класса пол, что релевантно для 2d платформеров, вроде Super Mario, нужно вместо координаты вашего объекта по оси ординат, использовать его координаты плюс вертикальная скорость. Таким образом, функция place_meeting будет проверять, встретитесь ли вы с объектом класса пол через 1 frame. Как только это происходит, необходимо задать цикл (лучше использовать while), сдвигающий ваш объект на один пиксель вниз за прогон цикла, до тех пор, пока вы не встретитесь с объектом класса пол, после чего цикл прерывается, а вертикальная скорость приравнивается к нулю.

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

0 Комментариев

Оставить комментарий