Четверг, 28 Марта 2024, 19:59

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Общие обсуждения программистов » самонаводящиеся снаряды-бумеранги
самонаводящиеся снаряды-бумеранги
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, действительно, просто недосмотрел до этого момента smile
GargolevДата: Среда, 16 Мая 2012, 23:51 | Сообщение # 5
был не раз
Сейчас нет на сайте
Если присмотреться, то все-таки используется синусоида:
видео (смотреть с 1:59)
Я не знаю, есть ли смысл еще мне персонально записывать видео, учитываю количество подобных видео в интернете. Также эта игра должна быть чуть ли не на любом портале приставочных игр

Как я вычисляю траекторию (еще разбираюсь с оружием 2, поэтому пока только теоретически):
1)определить уравнение прямой - кратчайшее расстояние между кораблем и врагом-целью
2)из уравнения прямой вычислить угол наклона этой прямой
3)нарисовать синусоиду и повернуть ее на найденный угол

Остается неясным как миниум:
- как учесть резкие повороты, когда направление движения снаряда иногда меняется почти на 90 градусов
- завихрения, когда снаряд нарезает круги, а потом уничтожается при столкновении с врагом или через некоторое время летит по касательной к этой окружности. При этом направление движения может измениться на почти противоположное
XageuДата: Четверг, 17 Мая 2012, 00:14 | Сообщение # 6
Хадей - Друг Детей
Сейчас нет на сайте
Gargolev, можно поставить ограничение на угол поворота. Как это вижу я:
-нужно запомнить предыдущую точку и угол объекта в ней
-сравнить с текущим углом. У нас стоит ограничение на единовременный поворот на, допустим, 5 градусов. Если текущий угол больше на 5, чем предыдущий, то присваиваем ему значение предыдущий угол+5 градусов.
-Если выполняется условие, что можно включить синусоиду - включаем её и отправляем в полёт

В общем. смысл в том, что нужно заставить плавно поворачиваться объект. Можно через окружность, можно через градусы. Алгоритм написал, осталось думать дальше smile


GargolevДата: Четверг, 17 Мая 2012, 15:50 | Сообщение # 7
был не раз
Сейчас нет на сайте
Загё, ты прав, но отчасти. Попробую развить твою идею.

Все враги, на которых наводятся снаряды, движутся. Даже если вроде стоят на месте, то все равно движутся, поскольку прокручивается фон с этими врагами.
Закроем пока глаза на синусоиду. Траектория снарядов тогда была бы прямая, если бы враги были неподвижны, либо точно рассчитывалась точка столкновения. Вместо этого снаряд движется пошагово и на каждом шаге ищется прямая, на которой лежит кратчайшее расстояние между снарядом и врагом. Ну и твою идею про поворот не более, чем на 5 градусов за один раз. При движении по кругу - вместо уравнения окружности использовать поворот точки вокруг второй точки - и стандартные функции есть, и несложно запрограммировать самостоятельно матрицами.
В результате, никаких углов и предыдущих точек запоминать не надо. Нужны только текущая точка, целевая точка и время (если снаряд будет двигаться по кругу). Ну может еще не предыдущий, а просто один угол понадобится для окружности.

В итоге, я уже приступил к программированию. По этому вопросу вроде все тонкости рассмотрели, осталось понять, как после движения снаряда по окружности запустить его по касательной
lvovandДата: Четверг, 17 Мая 2012, 15:59 | Сообщение # 8
старожил
Сейчас нет на сайте
Quote (Gargolev)
По этому вопросу вроде все тонкости рассмотрели, осталось понять, как после движения снаряда по окружности запустить его по касательной


если у тебя есть функция движения по кругу, то уравнение касательной по производным уравнения движения найти можно


Разработка и продвижение сайтов. Дизайн
-Mikle-Дата: Четверг, 17 Мая 2012, 16:47 | Сообщение # 9
Изобретатель велосипедов
Сейчас нет на сайте
Не усложняйте себе жизнь. Какие, нафиг, уравнения? Зачем?
Такие вещи делают добавлением инерции на движение. То есть на снаряд действует сила, направленная к цели.
В каждом шаге цикла:
Code
v=v+f*dt
p=p+v*dt

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
был не раз
Сейчас нет на сайте
ссылка на видео
Форум игроделов » Программирование » Общие обсуждения программистов » самонаводящиеся снаряды-бумеранги
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг