PDA

Просмотр полной версии : Как быстрее обнаружить столкновение?


scarm
15.01.2012, 21:43
Игровое поле - "Шахматная" матрица. На поле рандомно стоят враги, из героя вылетает пуля.
Пуля двигается по таймеру с delay = 50, пуль на поле может быть несколько, до 10-20, поэтому, важна производительность.
Стоит задача обнаружить столкновение пули с врагом.
Передо мной сейчас два варианта решения:

Просчитать координаты пули, сравнить с координатами врагов, при попадании профит. Минус - можно просчитать только координаты клетки, в которой сидит злодей, а его размеры могут быть меньше. С другой стороны, при тайминге в 50мс, это не критично.
Отслеживать кто на данный момент лежит под пулей через

gameField.getObjectsUnderPoint(new Point(bullet[i].x, bullet[i].y));
В п.2 прибавляется трата ресурсов на отфильтровку от мусора полученного массива, т.к. внизу всегда находится 5-6 объектов

Собственно, вопрос, какой из этих вариантов будет производительнее?
Заранее спасибо.

Vektor
15.01.2012, 22:05
Пуля двигается по таймеру с delay = 50, пуль на поле может быть несколько, до 10-20, поэтому, важна производительность.
Я не понял, 10-20 это что много, по-моему, мы из каменного века, вроде вышли или я неправ.

scarm
15.01.2012, 22:18
Честно говоря, не знаю))) меня смущает не столько количество, сколько то, что все просчеты должны проделываться каждую итерацию, т.е. 50мс. При тестовом рендере запускал пули с каждого края доски по 6 штук (итого 6*4=24). Пули просто перемещались без обсчета столкновений. На моем стареньком ноутбуке (1гиг оперативки + винXP) заметно ощущалось торможение. Если добавить расчеты, то не факт, что вышли из каменного века

Vektor
15.01.2012, 22:32
Процессор в основном нагружает, графика, а ваши расчеты он проглотит и даже не поперхнется, вот если бы счёт шёл на сотни или даже на тысячи, вот тогда можно было бы подумать об оптимизации.

scarm
15.01.2012, 22:35
Кстати да, анимации там порядочно. Ок, спасибо, буду дальше ехать)