Среда, 25 Декабря 2024, 20:06

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Реализация коллизии
lentinantДата: Среда, 23 Апреля 2014, 21:39 | Сообщение # 1
ленивый программист
Сейчас нет на сайте
Подскажите, как можно реализовать простую коллизию в чистом C# (для объектов, нарисованных с помощью GDI+), желательно, без итерации по всем объектам на уровне. Пока у меня единственная идея - представление простых коллайдеров в виде уравнений геометрических фигур, и проверка соответственных уровнений на наличие общей точки (хотя, тут тоже нужна итерация).

Когда-то тут будут ссылки на крутые проекты. Или нет.
Storm54Дата: Четверг, 24 Апреля 2014, 03:05 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Вполне себе приемлемый вариант - представить тело объекта в виде точек, которые будут соединяться в отрезки. Коллизии проверять посредством пересечения отрезков. Я реализовывал такой механизм - работает довольно шустро при большом количестве объектов(в несколько сотен, а то и тысяч), расставленных по всей карте. Однако, здесь нужно грамотно подойти к оптимизации. Перебирать все отрезки - очень медленно и убьет FPS мгновенно. Поэтому первое, что нужно сделать: рассчитывать Bounding Box тела и проверять пересечения тела сначала с ним, а потом уже при необходимости(если пересекается с боксом) проверять пересечение с отрезками. В больших мирах такой оптимизации так же будет недостаточно, т.к. перебирать все-равно придется все боксы. Единственный вариант - поделить мир на огромные мета-боксы, в которые занести все объекты попадающие в этот Bounding Box и сначала проверять пересечение объекта со всеми соседними мета-боксами, включая и тот, в котором находится сам объект, а потом уже проверять пересечения уже с bounding box'ами каждого объекта, включенного в мета-бокс.

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


Сообщение отредактировал Storm54 - Четверг, 24 Апреля 2014, 03:24
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг