Ich möchte eine Reihe expandierender Aufzählungszeichenmuster erstellen, die Formen wie Quadrate, Dreiecke usw. bilden. Ein Beispiel dafür, wonach ich suche, ist im folgenden Video zu sehen, in dem die Aufzählungszeichen in der Form eines explodieren, wenn die Sterne gesammelt werden expandierender Stern:
12
Antworten:
Am einfachsten ist es, zuerst die Form zu entwerfen und dann die Bewegung der Partikel zu berechnen. In dieser Antwort werde ich ein Quadrat konstruieren, aber das gilt für jede Form.
Beginnen Sie, indem Sie Ihre Form als relative Position um einen Ursprungspunkt herum entwerfen.
Nun müssen Sie berechnen, wie sich die Form ausdehnt. Dazu berechnen wir einfach den Vektor, der von dem
origin
auf jeden zeigt,point
indem wir dieorigin
Position von unsererpoint
Position subtrahieren und dann den Vektor normalisieren .vector = normalize(point.x - origin.x, point.y - origin.y)
.Mit diesem Vektor können wir nun die Position der Punkte zu jedem Zeitpunkt berechnen. Sie berechnen damit die nächste Position der Punkte
point.position += point.vector * point.velocity
. Pseudocode-Beispiel mit unserem vorherigen Punkt:Auf diese Weise werden alle Punkte um 3 Einheiten pro Frame nach außen verschoben.
Anmerkungen
quelle
Es gibt also ein Projekt namens BulletML , eine Auszeichnungssprache zum Erstellen komplexer Partikel- / Aufzählungsmuster. Sie müssen den Code mit ziemlicher Sicherheit in Ihre eigene Sprache portieren, aber er kann einige wirklich erstaunliche Dinge bewirken.
Zum Beispiel wurde dieser Boss in einer (stark modifizierten) Erweiterung von BulletML für Unity3D (der Autor dieses Musters hat hochgeladen, dass Video und Misery verrückt sind, sowie gut 1 ). Es ist die schwierigste Variante dieses Feindes und zeigt, wozu BulletML ziemlich gut in der Lage ist (und schaut euch auch einige der anderen Bosse von Misery an, wie Wallmaster ).
Oder ich zeige dieses Beispiel, das ich während der Arbeit an einer Erweiterung für The Last Federation mit einer älteren Version des Systems geschrieben habe, die weniger modifizierbar ist und nur Einzelzeichen-AZ-Variablen verwendet:
Die grünen Kugeln, die diese Ringe dort herstellen, werden von einer übergeordneten Kugel erzeugt, die sich mit hoher Geschwindigkeit dreht, aber selbst keine Bewegung hat. Sie verursachen massiven Schaden, halten den Spieler in größerer Reichweite, beschränken ihn auf Waffen mit geringerem Schaden und ermöglichen mobilen Verteidigern, den Spieler zu belästigen (der Spieler hat gewonnen, wenn die unbewegliche Struktur in der Mitte zerstört wurde).
Hier ist ein Teil der XML-Syntax, mit der diese Blasen erstellt werden:
Sie können einige der lila "Gravitationswellen" -Schüsse auf dem Screenshot sehen, die sich fast sofort von der Quelle (die sich dreht) zum Rand der Blase bewegen, woraufhin der grüne "gekrümmte Balken" -Schuss erzeugt wird, der dort 12 Sekunden vorher sitzt entlasten. Die blauen und gelben Aufnahmen habe ich weggelassen, da sie viel komplizierter sind.
Eines der anderen Muster (ein Artillerie-Granate ) in der Erweiterung wurde tatsächlich von Misery geschrieben, obwohl ich einige Änderungen daran vorgenommen habe. Anfänglich handelt es sich um einen schadensarmen, durchdringenden Schuss, der auf große Entfernung abgefeuert wird und dann in ein riesiges Feuerwerk explodiert, das Tonnen von Schaden verursacht. Die maximale Reichweite war viel höher als der Spieler erreichen konnte, was den Spieler zwang, sich auf kurze Distanz zu bewegen, was für die anderen Arten von NPC-Einheiten aufgrund des Schrotflinteneffekts von Vorteil war (mehr Kugeln in einer kleinen Zone).
BulletML ist im Allgemeinen einfach zu handhaben und kann erstaunliche Dinge bewirken. Aufzählungszeichen können die Richtung ändern, die Geschwindigkeit ändern, andere Muster erzeugen, frühzeitig absterben, das Sammeln von Befehlen in einer Schleife wiederholen, Verzögerungen verwenden, das Sprite-Bild des Aufzählungszeichens ändern, dem übergeordneten Element folgen (oder nicht) schreibe hinein.
Ich würde es auf jeden Fall empfehlen, wenn Sie ein ernstes Shoot-Em-Up-Spiel machen. Sie müssten immer noch die Koordinaten berechnen, um die gewünschten Formen zu erhalten, wie Charanor in seiner Antwort ausführt, aber eine Bullet-Engine wie BulletML bietet Ihnen so viel mehr Flexibilität, dass Sie mehr Zeit mit dem Entwerfen neuer Muster verbringen müssen als mit dem Herausfinden wie codieren sie.
quelle
Wie von Charanor hervorgehoben, können Sie eine Reihe von Punkten verwenden, um Ihre Form zu definieren und ihre Position im Laufe der Zeit zu aktualisieren. Im Folgenden finden Sie ein Arbeitsbeispiel für die Implementierung einer Sternform oder einer benutzerdefinierten Form mithilfe von Punkten:
quelle