вторник, 19 июня 2012 г.

Corona SDK - самонаводящиеся пули

Пули, заклинания или иные объекты, которые летят к цели несмотря ни на что, можно встретить в играх типа tower defence (TD), Warcraft 3. Я решил сделать такие же.






Опишу основные моменты, которые необходимо учесть.

Создание пули:
  1. определить координаты пули
  2. задать цель (передать ссылку на объект, а не координаты цели)
Основной цикл (вызывается 30 (или 60 ) раз в секунду, зависит от fps)
  1. если пуля за пределами экрана - уничтожаем пулю
  2. если цели больше нет (умерла, исчезла, далеко) - уничтожаем пулю
  3. рассчитываем угол на цель и поворачиваем пулю к цели
  4. рассчитываем расстояние между пулей и целью
  5. если скорость пули больше расстояния (т.е. можно достигнуть цель за один шаг), то просто перемещаем пулю на цель
  6. если расстояние больше, то вычисляем смещение по осям (x и y) и двигаем пулю
  7. проверяем столкновение пули с целью, если есть, то отнимаем damage у цели и уничтожаем пулю
Немного кода:
P.S. В приведенном коде скорость пули не зависит от fps. По хорошему нужно задавать скорость в единицах в секунду (например, 20 пикселей в секунду) и при расчетах вычислять сколько прошло времени с последнего прорисованного фрейма, а затем использовать этот коэффициент для расчета скорости перемещения в этой итерации.