Какая математика стоит за фиолетовым лазером Raiden 2?

15

Путь лазера зависит от пользовательского ввода и врагов, присутствующих на экране. Вот видео, в 5:00 минут показывается рассматриваемый лазер: Raiden II (PS) - 1 Loop Clear - Part 2

ОБНОВИТЬ

Вот тест с использованием Inkscape, корабль находится внизу, первые 4 врага попадают под плазму. Кажется, есть какая-то модель. Сначала я переместил корабль, затем ручку от него, чтобы сформировать угол 45 °, затем, пытаясь подобрать изгиб, я нашел схему параллельных ручек и продолжал так, пока не достиг последнего врага. введите описание изображения здесь

Обновление от 26.05.2012 . Я запустил проект XNA, используя Безье, еще предстоит проделать определенную работу, обновлю вопрос на следующей неделе. Будьте на связи !

введите описание изображения здесь

Обновление: 30.05.2012 . Похоже, что они используют кривые Безье, я думаю, что смогу копировать / имитировать плазму такого сорта. С прошлого раза я открыл две новые темы: длина дуги , феномен Рунге , первая должна помочь в линейном перемещении по кривой Безье, вторая должна помочь в оптимизации количества вершин. В следующий раз я выложу видео, чтобы вы могли видеть прогресс 8-)

Aybe
источник
2
Ну, это сплайн какой-то. Возможно Кривая Безье . Я не уверен, отвечает ли этот вопрос кому-либо, кроме оригинальных разработчиков. Если вы пытаетесь воссоздать этот эффект, вы должны показать нам, что у вас есть, и рассказать, что с ним не работает.
MichaelHouse
2
Понятия не имею, но у него есть штраф за количество радикалов.
Хакворт
1
Сыграв нездоровое количество Райдена, я сомневаюсь, что зубная паста - это какая-то кривая замкнутой формы. Казалось, он всегда держал изрядное количество памяти. Я подозреваю, что это делает некоторый путь с обязательным радиусом поворота.
@ Byte56: Разработчики / фанаты Shmup посвящены, я был бы удивлен, если бы это не было документировано / реверс-инжиниринг где-то сейчас.
3
Похоже, он размещает сегменты по одному, выходящие из корабля, с максимальным изгибом, и каждый сегмент либо поворачивается к врагам, если таковые имеются поблизости, либо в направлении движения корабля.
Кевин Рид

Ответы:

6

Я только что создал что-то, что может вам помочь. Это было в ответ, чтобы помочь кому-то на форумах GLBasic.

Вот ссылка на форум с моим предложением: Случайные Текстурированные Роллинг Хиллз

Это написано на GLBasic, но я старался, чтобы его было легко читать, поэтому он должен быть легко преобразован в любой язык.

Чтобы использовать его для своих нужд, вам нужно будет сгенерировать сплайн-данные / точки. Замените точки 'холма' в моем примере вашими точками сплайна. Вам нужно всего лишь добавить эффект анимации / мерцания. Может быть, случайный сдвиг текстуры.

Настоящее волшебство происходит в моей функции AddPoint:

FUNCTION AddPoint: h AS THillPoint
    DIMPUSH self.points[], h

    // Is this the very first data point?
    IF LEN(self.points[]) = 1
        self.points[0].pu.Set(0, self.points[0].pm.y - self.texture_ht_up)
        self.points[0].pd.Set(0, self.points[0].pm.y + self.texture_ht_dn)
        RETURN
    ENDIF

    ALIAS h0 AS self.points[-2]  // Reference to the 2nd last point
    ALIAS h1 AS self.points[-1]  // Reference to the last point
    LOCAL angle#
    LOCAL v1 AS TVector
    LOCAL v0 AS TVector

    // Calculate 'p2' of HillPoint - form rectangle with previous point
    angle = ATAN(h1.pm.y - h0.pm.y, h1.pm.x - h0.pm.x)  -90// Angle of the two points

    v1.x = COS(angle) * self.texture_ht_up + h1.pm.x
    v1.y = SIN(angle) * self.texture_ht_up + h1.pm.y
    v0.x = COS(angle) * self.texture_ht_up + h0.pm.x
    v0.y = SIN(angle) * self.texture_ht_up + h0.pm.y
    h0.pu = h0.pu.AverageWith(v0)
    h1.pu.Copy(v1)

    v1.x = COS(angle) * -self.texture_ht_dn + h1.pm.x
    v1.y = SIN(angle) * -self.texture_ht_dn + h1.pm.y
    v0.x = COS(angle) * -self.texture_ht_dn + h0.pm.x
    v0.y = SIN(angle) * -self.texture_ht_dn + h0.pm.y
    h0.pd = h0.pd.AverageWith(v0)
    h1.pd.Copy(v1)
ENDFUNCTION

Здесь я вычисляю последние квадры / полигоны, которые строят спрайт вдоль линии.

Вот окончательные результаты: введите описание изображения здесь

И с включенным каркасом полигонов: введите описание изображения здесь

Doug.McFarlane
источник
1
Отлично, я посмотрю на это. Кстати, ссылка, которую вы дали, не работает.
Aybe
3
Мне кажется, что ссылка не сломана ...
doppelgreener
Я только что проверил ссылку Random Textured Rolling Hills прямо сейчас, она выдает ошибку 404.
Aybe
1
Weird. Это все еще работает для меня. Но вот основная ссылка: glbasic.com/forum/index.php?topic=8118
Doug.McFarlane
Сломанный для меня, я попробовал домашнюю страницу, она показывает 'Это работает!' и это все ... странно.
Aybe