самонаводящиеся снаряды-бумеранги
|
|
Gargolev | Дата: Среда, 16 Мая 2012, 11:14 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Хочу написать игру, похожую на "Gun Nac" (с приставки NES/Dendy). В игре есть оружие 3, которое стреляет какими-то бумерангами, которые летят по какой-то кривой траектории. Собственно, не могу понять, какие математические функции использовать, чтобы запрограммировать такое движение. Нашел пример только просто самонаводящихся снарядов Саму игру можно найти в интернете и запустить через эмулятор. Либо можно найти видео, например: ссылка на видео (начиная с 0:28)
|
|
| |
Vigilem | Дата: Среда, 16 Мая 2012, 17:16 | Сообщение # 2 |
частый гость
Сейчас нет на сайте
| Сначала показалось, что движение вообще беспорядочное, но потом... мне кажется, что используется синусоида, а на каждой итерации рандомно задаётся икс.
|
|
| |
GECK | Дата: Среда, 16 Мая 2012, 18:15 | Сообщение # 3 |
заслуженный участник
Сейчас нет на сайте
| Я так понял, что там кроме самонаводки ничего специфичного нет - пули просто плавно поворачиваются к ближайшему врагу(где-то на 1:17 видно, что когда противников нет, пули летят по прямой). Ощущение синусоиды появляется из-за того, что их много и изначально они не всегда повернуты к цели передом.
Всё гениальное просто. И хреново работает.
|
|
| |
Vigilem | Дата: Среда, 16 Мая 2012, 20:51 | Сообщение # 4 |
частый гость
Сейчас нет на сайте
| GECK, действительно, просто недосмотрел до этого момента
|
|
| |
Gargolev | Дата: Среда, 16 Мая 2012, 23:51 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Если присмотреться, то все-таки используется синусоида: видео (смотреть с 1:59) Я не знаю, есть ли смысл еще мне персонально записывать видео, учитываю количество подобных видео в интернете. Также эта игра должна быть чуть ли не на любом портале приставочных игр
Как я вычисляю траекторию (еще разбираюсь с оружием 2, поэтому пока только теоретически): 1)определить уравнение прямой - кратчайшее расстояние между кораблем и врагом-целью 2)из уравнения прямой вычислить угол наклона этой прямой 3)нарисовать синусоиду и повернуть ее на найденный угол
Остается неясным как миниум: - как учесть резкие повороты, когда направление движения снаряда иногда меняется почти на 90 градусов - завихрения, когда снаряд нарезает круги, а потом уничтожается при столкновении с врагом или через некоторое время летит по касательной к этой окружности. При этом направление движения может измениться на почти противоположное
|
|
| |
Xageu | Дата: Четверг, 17 Мая 2012, 00:14 | Сообщение # 6 |
Хадей - Друг Детей
Сейчас нет на сайте
| Gargolev, можно поставить ограничение на угол поворота. Как это вижу я: -нужно запомнить предыдущую точку и угол объекта в ней -сравнить с текущим углом. У нас стоит ограничение на единовременный поворот на, допустим, 5 градусов. Если текущий угол больше на 5, чем предыдущий, то присваиваем ему значение предыдущий угол+5 градусов. -Если выполняется условие, что можно включить синусоиду - включаем её и отправляем в полёт
В общем. смысл в том, что нужно заставить плавно поворачиваться объект. Можно через окружность, можно через градусы. Алгоритм написал, осталось думать дальше
|
|
| |
Gargolev | Дата: Четверг, 17 Мая 2012, 15:50 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Загё, ты прав, но отчасти. Попробую развить твою идею.
Все враги, на которых наводятся снаряды, движутся. Даже если вроде стоят на месте, то все равно движутся, поскольку прокручивается фон с этими врагами. Закроем пока глаза на синусоиду. Траектория снарядов тогда была бы прямая, если бы враги были неподвижны, либо точно рассчитывалась точка столкновения. Вместо этого снаряд движется пошагово и на каждом шаге ищется прямая, на которой лежит кратчайшее расстояние между снарядом и врагом. Ну и твою идею про поворот не более, чем на 5 градусов за один раз. При движении по кругу - вместо уравнения окружности использовать поворот точки вокруг второй точки - и стандартные функции есть, и несложно запрограммировать самостоятельно матрицами. В результате, никаких углов и предыдущих точек запоминать не надо. Нужны только текущая точка, целевая точка и время (если снаряд будет двигаться по кругу). Ну может еще не предыдущий, а просто один угол понадобится для окружности.
В итоге, я уже приступил к программированию. По этому вопросу вроде все тонкости рассмотрели, осталось понять, как после движения снаряда по окружности запустить его по касательной
|
|
| |
lvovand | Дата: Четверг, 17 Мая 2012, 15:59 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| Quote (Gargolev) По этому вопросу вроде все тонкости рассмотрели, осталось понять, как после движения снаряда по окружности запустить его по касательной
если у тебя есть функция движения по кругу, то уравнение касательной по производным уравнения движения найти можно
Разработка и продвижение сайтов. Дизайн
|
|
| |
-Mikle- | Дата: Четверг, 17 Мая 2012, 16:47 | Сообщение # 9 |
Изобретатель велосипедов
Сейчас нет на сайте
| Не усложняйте себе жизнь. Какие, нафиг, уравнения? Зачем? Такие вещи делают добавлением инерции на движение. То есть на снаряд действует сила, направленная к цели. В каждом шаге цикла: v-скорость (вектор) f-сила (вектор) p-позиция (вектор) dt-прошедшее с прошлого кадра время. Всё!
|
|
| |
Gargolev | Дата: Понедельник, 21 Мая 2012, 14:01 | Сообщение # 10 |
был не раз
Сейчас нет на сайте
| Quote (lvovand) если у тебя есть функция движения по кругу, то уравнение касательной по производным уравнения движения найти можно и чо? частные производные будем брать в уравнении, где две координаты зависят от времени
Quote (-Mikle-) Не усложняйте себе жизнь. Какие, нафиг, уравнения? Зачем? Такие вещи делают добавлением инерции на движение. То есть на снаряд действует сила, направленная к цели. да, давайте уберем относительно простые математические уравнения и команды движка и вставим сюда уравнения из физики, а еще будем складывать и перемножать векторы
мне наверно будет проще будет сделать так: - в момент прекращения движения по окружности провести прямую через текущую точку и центр окружности - провести прямую, проходящую через текущую точку и перпендикулярную первой прямой - определить точку, находящуюся на пересечении второй прямой и границы поля/экрана и двигаться к нейДобавлено (21.05.2012, 14:01) --------------------------------------------- Сделал что-то отдаленно напоминающее эту траекторию. Без синусоиды и движения по кругу. И еще иногда движение снаряда после исчезновения цели подглючивает. Кому-нибудь интересно посмотреть?
Сообщение отредактировал Gargolev - Четверг, 17 Мая 2012, 17:01 |
|
| |
TimKruz | Дата: Понедельник, 21 Мая 2012, 20:53 | Сообщение # 11 |
старожил
Сейчас нет на сайте
| Quote (Gargolev) Кому-нибудь интересно посмотреть? Да уж покажи. И если Quote (Gargolev) без синусоиды и движения по кругу, то тогда как? Интересно.
|
|
| |
Xageu | Дата: Понедельник, 21 Мая 2012, 21:17 | Сообщение # 12 |
Хадей - Друг Детей
Сейчас нет на сайте
| Косинусоида )))
|
|
| |
Gargolev | Дата: Вторник, 29 Мая 2012, 12:43 | Сообщение # 13 |
был не раз
Сейчас нет на сайте
| ссылка на видео
|
|
| |