Was ist die Mathematik hinter 'Raiden 2' lila Laser?

15

Der Weg des Lasers wird durch Benutzereingaben und auf dem Bildschirm vorhandene Feinde beeinflusst. Hier ist ein Video, um 5:00 Uhr wird der betreffende Laser gezeigt: Raiden II (PS) - 1 Loop Clear - Teil 2

AKTUALISIEREN

Hier ist ein Test mit Inkscape, Schiff ist unten, die ersten 4 Gegner werden vom Plasma angegriffen. Es scheint eine Art Muster zu geben. Ich bewegte zuerst das Schiff und dann den Griff, um einen Winkel von 45 ° zu bilden. Während ich versuchte, mich der Kurve anzupassen, fand ich ein Muster paralleler Griffe und fuhr so ​​fort, bis ich den letzten Feind erreichte. Bildbeschreibung hier eingeben

Update, 26.05.2012 : Ich habe ein XNA-Projekt mit Beziers gestartet. Es sind noch einige Arbeiten erforderlich. Die Frage wird nächste Woche aktualisiert. Bleib dran !

Bildbeschreibung hier eingeben

Update: 30.05.2012 : Es sieht wirklich so aus, als würden sie Bézier-Kurven verwenden. Ich denke, ich kann ein Plasma dieser Qualität replizieren / imitieren. Es gibt zwei neue Themen, die ich seit dem letzten Mal entdeckt habe: Bogenlänge , Runges Phänomen. Zum einen soll eine lineare Bewegung über eine Bézier-Kurve möglich sein, zum anderen soll die Anzahl der Scheitelpunkte optimiert werden. Nächstes Mal werde ich ein Video veröffentlichen, damit du den Fortschritt sehen kannst. 8-)

Aybe
quelle
2
Nun, es ist eine Art Spline. Möglicherweise Bézier-Kurve . Ich bin mir nicht sicher, ob diese Frage von jemand anderem als den ursprünglichen Entwicklern beantwortet werden kann. Wenn Sie versuchen, diesen Effekt wiederherzustellen, sollten Sie uns zeigen, was Sie haben, und uns mitteilen, was nicht funktioniert.
MichaelHouse
2
Keine Ahnung, aber es hat eine Menge Radikalität.
Hackworth
1
Nachdem ich eine ungesunde Menge von Raiden gespielt habe, habe ich meine Zweifel, dass die Zahnpasta jede Art von geschlossener Formkurve ist. Es schien immer ziemlich viel Gedächtnis zu behalten. Ich vermute, dass es eine Art Pfad mit einem obligatorischen Wendekreis macht.
@Byte56: Shmup-Entwickler / Fans sind engagiert, ich wäre überrascht, wenn dies noch nicht dokumentiert / rückentwickelt ist.
3
Es sieht so aus, als würde ein Segment nach dem anderen mit einer maximalen Biegung aus dem Schiff entfernt, und jedes Segment wendet sich entweder Feinden zu, falls welche in der Nähe sind, oder in Richtung der Schiffsbewegung.
Kevin Reid

Antworten:

6

Ich habe gerade etwas erschaffen, das dir helfen könnte. Es war eine Reaktion darauf, jemandem in den GLBasic-Foren zu helfen.

Hier ist der Forum Link mit meinem Vorschlag: Random Textured Rolling Hills

Dies ist in GLBasic geschrieben, aber ich habe versucht, es einfach zu lesen, so dass es leicht in jede Sprache konvertiert werden sollte.

Um es für Ihre Bedürfnisse zu verwenden, müssten Sie Ihre Spline-Daten / -Punkte generieren. Ersetzen Sie die "Hügel" -Punkte in meinem Beispiel durch Ihre Spline-Punkte. Sie müssten nur irgendwie einen Animations- / Flackereffekt hinzufügen. Vielleicht eine zufällige Texturverschiebung.

Die wahre "Magie" passiert in meiner "AddPoint" -Funktion:

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

Hier berechne ich die endgültigen Quads / Polygone, die das Sprite entlang der Linie zeichnen.

Hier sind die Endergebnisse: Bildbeschreibung hier eingeben

Und mit eingeschaltetem Drahtgitter der Polygone: Bildbeschreibung hier eingeben

Doug.McFarlane
quelle
1
Großartig, ich werde es mir ansehen. Übrigens ist der Link, den du gegeben hast, kaputt.
Aybe
3
Der Link scheint für mich nicht kaputt zu sein ...
doppelgreener
Ich habe gerade den Link "Random Textured Rolling Hills" (Zufällige strukturierte Rolling Hills) überprüft. Es wird ein 404-Fehler angezeigt.
Aybe
1
Seltsam. Es funktioniert immer noch bei mir. Aber hier ist der zugrunde liegende Link: glbasic.com/forum/index.php?topic=8118
Doug.McFarlane
Für mich kaputt, ich habe versucht, die Homepage, es zeigt "Es funktioniert!" und das wars ... komisch.
Aybe