Про обнаружение коллизий
Хоть персонаж и научился бегать, сейчас это всего лишь движущаяся по экрану картинка. Он ничего не знает о том, висит ли он в воздухе или стоит на твердой поверхности. Для того чтобы это исправить, нужно добавить в игру алгоритм обнаружения коллизий.
Коллизия — это столкновение двух и более объектов. Задача алгоритма сводится к тому, чтобы попарно проверить все игровые объекты на пересечение. Это трудоемкая операция, которая требует серьезные вычислительные затраты, учитвая то, что выполнять подобную проверку нужно несколько десятков раз в секунду.
Тем не менее, существует множество способов оптимизировать эту проверку. К примеру, простые геометрические фигуры такие как эллипс, круг или прямоугольник, проверить на пересечение значительно проще и быстрее чем сложные многоугольники с большим количеством вершин. Пусть из-за этого столкновения будут менее реалистичными, но в играх высокая точность обычно и не требуется.
Таким образом, сложный по своей форме петух, может быть преставлен простым прямоугольником или же их комбинацией.
Да, пожалуй, стоит подчеркнуть, что картинка персонажа, которая рисуется на экране, не имеет ничего общего с его физическими габаритами. Это две совершенно разные характеристики, которые описываются и обрабатываются отдельно.
Еще один из способ оптимизации основан на том, что на самом деле далеко не все объекты сцены пересекаются. Многие из них разнесены достаточно далеко друг от друга. Поэтому процесс обнаружения столкновений можно разделить на две фазы: широкую и узкую.
Во время широкой фазы применяются алгоритмы, которые довольно грубо отсеивают те пары объектов, которые не пересекаются точно. Часто для этого используют так называемые AABB (Axis Aligned Bounding Box). Ими описываются более сложные по форме объекты, что позволяет сократить время на проверку их пересечения.
В узкой фазе мы получаем набор пар, которые МОГУТ пересекаться и для того чтобы узнать это наверняка, производится более тщательная проверка с использованием уже “тяжелых” алгоритмов.
Помимо системы обнаружения коллизий, я также добавил в игру довольно простую физическую систему, чтобы как-то обрабатывать информацию об обнаруженных столкновениях.