43. [howto] Игровая физика. Траектория полёта снаряда, выпущенного под углом к горизонту

Game – Серия статей посвященных разработке flash-игр на языке ActionScript. Игры для соц.сетей и мобильных платформ iOS, Android.
http://flashpress.ru/blog/category/game/
Здесь должна быть флешка. Установите Flash Player

Flash-игры наверное самое распространенное применение языка ActionScript. Существует много различных типов игр. Есть и такие, которые требуют применения законов физики, формулы математики и геометрии. Не стоит пугаться этих слов. В этой статье мы не будем погружаться в эту темную дыру. Я расскажу вам как можно эмулировать полет снаряда используя самые элементарные понятия, такие как сила тяжести и вектор направления.

Конечно же в сети вы сможете найти огромное количество различных движков реализующих законы физики. Но если вам надо написать простой баннер с летящим снарядом, применение такого движка чревато увеличением размера флешки до 100-200 кб как минимум. Да и к тому же всегда полезно знать на чем основана работа таких движков. Прочитав статью вы поймете как можно применять векторы сил, и как получать результат действия этих сил.

Статья разделена на две части. В первой мы разберем теоретическую часть вопроса, научимся создавать векторы сил и складывать их в двумерном пространстве. Во второй напишем код на языке ActionScript, отображающий летящий снаряд. Если от таких понятий как Вектор силы и Тангенс угла вас не бросает в ужас, и вы знаете как складывать векторы, можете пропустить первую часть и приступить к написанию ActionScript кода.

Теория

Ну что же, приступим. Для начала вспомним элементарные законы физики. Что приводит в действие снаряд? Первоначальная сила действующая на снаряд это взрывная волна внутри пушки. Пушка имеет такие характеристики как

1. мощность взрывной волны
2. угол наклона

Товарищ Калашников наверняка сказал бы, что есть еще особое строение ствола, форма снаряда и т.д. Конечно мы не будем рассматривать все возможные характеристики, ограничимся выше указанными. В геометрии мощность взрыва и угол наклона можно описать с помощью вектора. Мощность это длина вектора, а угол наклона это отношение координат X и Y:
shell-fly1

В программировании вектор описывается двумя координатами: X и Y. Для хранения этих значений в языке ActionScript есть класс Point. Давайте зададим вектор который направит снаряд по углом 60 градусов к горизонту. Если вспомнить тригонометрию, имеем: косинус это отношение прилежащего катета к гипотенузе, а синус отношение противолежащего катета к гипотенузе. На предыдущем рисунке гипотенуза это отрезок MN, и катеты X, Y. Длина гипотенузы MN в данном случае это будет мощность взрыва. Чем больше длина этого отрезка, тем дальше улетит снаряд. Попробуем создать вектор со значением мощности 10

Что бы наш снаряд двигался, надо этот вектор применять к нашему снаряду. Т.е. в каждый момент времени прибавляем к координатам нашего снаряда значение вектора:

Если на снаряд будет действовать только одна сила которая была задана в момент выстрела, то наш снаряд улетит в космос. Что бы этого не произошло, добавляем еще одну силу которая действует на снаряд – это сила тяжести. Записывается она так же в виде вектора. Т.к. сила тяжести всегда направлена вниз, то у этого вектора координата X всегда будет 0, а со значением Y можно поиграться что бы найти оптимальное значение силы тяжести. Что бы в коде применить силу тяжести к нашему вектору, необходимо в каждый момент времени складывать эти векторы, в результате мы получим новый вектор направления снаряда, как показано на рисунке:
shell-fly2

  • Синие стрелки – направление движения в каждый момент времени
  • Красные стрелки – сила тяжести
  • Черный пунктир – сумма векторов направления и силы тяжести
  • Зеленый пунктир – примерная траектория движения снаряда

Складывание векторов записывается следующим образом:

Обратите внимание что вектор направления движения имеет отрицательную координату Y, а гравитация положительную. Это потому что в коде ActionScript начало координат находится в левом верхнем углу, и отсчет по координате Y идет сверху вниз

Пишем код ActionScript

FlashBuilderFlashIDE
Код для редактора Adobe FlashBuilder
Код для редактора Adobe Flash CS Professional

Скачать исходники можно здесь.

Задание #1
Задайте еще одну силу действующую на объект – сила ветра, направленная против движения снаряда.

Здесь должна быть флешка. Установите Flash Player


Если у вас что то не получилось или вы хотите получить оценку сделанному, прикладывайте в комментариях или отправляйте мне на почту архив с вашим проектом. Отправить письмо можно в разделе Контакты

Да прeбудет с вами Flash.
Serious Sam
Эту статью прочитали 6303 раз

Возникли вопросы по статье? Не стесняйтесь спрашивать в комментариях или любым другим способом на странице Контакты .

Присоединяйтесь к нам в социальных сетях: ВКонтакте , Twitter и Facebook
Понравилась статья? Буду благодарен если вы поделитесь ссылкой с друзьями:


Комментарии ВКонтакте:




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




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