Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

Как точнее детектировать коллизии на высокой скорости движения спрайтов

Мне кажется , что эта проблема решаема только, если улучшить характеристики самого андроид гаджета, но всё же может я не прав.
Так вот, есть Спрайт, его координата (x,y) , есть ускорение а . Ускорение меняется так a = a + 3 , а координаты так x = x + a, y = y + a .
Всё считается в пикселях. Скорость тут как видите имитируется увеличением шага, который прибавляется к координатам. Когда шаг будет велик (т.е. скорость большая) , два спрайта , которые летят друг другу на встречу, могут проскочить "насквозь" .
Чтобы этого не было и скорость сохранялась, можно увеличить частоту кадров, а шаг, который прибавляется к координатам оставлять как можно меньшим. Но тогда появляется множество других проблем:1) скорость зависит от фпс , который может выдать то или иное устройство 2) мы не можем поднять фпс до требуемой скорости с 100 процентным детектированием всех коллизий.
Такая же проблема имеется, когда спрайт получает координаты от сенсора устройства. Если провести быстро по сенсору на всю его длину , он отловит например 5 координат , если тащить палец медленно таких координат будет больше. (скорее всего сенсор с определенным временным интервалом сканирует экран на наличие касаний, уменьшить временной интервал и не может и не целесообразно, хотя не плохо бы иметь возможность уменьшать это время в определенном участке кода, а затем снова вернуть, но ведь андроид нам не позволит этого сделать или все же позволит? ответьте на этот вопрос хотя бы теоретически )
Есть ли другие способы для имитации скорости не теряя возможность качественного детектирования коллизии ?
Если это имеет значение : коллизии я определяю используя теорему о разделяющих осях. Спрайты квадратные.
Наверно можно как то преобразовать и сделать более надежный способ детектирования коллизий хоть и более затратный. Не будет ли в этом случае скорость движения спрайта, на которой 100 процентно детектируются коллизии пропорциональна уменьшению фпс.


Ответ

Рекомендую сделать как в современных игровых движках: сделать два таймера - один для проверки коллизий и физики, а другой чисто для рисования. Так-же в качестве минимального смещения использовать не 1 px, а например 0.01. Скорость обновления физики сделать в 3-4 раза больше рисования. В рисовании спрайтов можно просто округлять координаты до единиц.

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

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