Starling Indie Game Development oder Second Life Flash

Aus grafischer Sicht gewinnen die meisten Indie-Spiele an Beliebtheit, nicht durch die Anzahl der Polygone im Rahmen oder durch die hohe Qualität der Texturen, sondern durch eine ungewöhnliche Herangehensweise an Kunst und Liebe zum Detail, bei denen die meisten nur 2D-Grafiken verwenden. Meiner Meinung nach eignet sich Flash hervorragend für Projekte in diesem Stil. In diesem Fall sollte ein Flash nicht nur als Plug-In für Browser verstanden werden, das allmählich an Boden verliert und HTML5 Platz macht, sondern als „Ökosystem“ selbst, mit dem Sie die Fähigkeiten und die „Ideologie“ eines Flashs für die Entwicklung für Desktop- und mobile Plattformen nutzen können. Es geht um Adobe AIR (eine plattformübergreifende Umgebung zum Starten von Anwendungen) und das Starling- Framework, das bei der Entwicklung von Indie-Spielen verwendet wird.

Under the cut - Beispiele für praktische Lösungen und Animationseffekte.

Vom Vektor zum Raster


Das Projekt ist eine erweiterte Portierung des einst beliebten Flash-Spiels für Steam, natürlich in erweiterter Form (zum Beispiel hat sich die Anzahl der Level von 30 auf über 200 erhöht), und viele „Fallstricke“ mussten auf einer anderen Plattform erneut umgangen werden.

Im ursprünglichen Flash-Spiel wurde die Inhaltsrasterung beim Start der Anwendung verwendet (genauer gesagt, als der Benutzer zum ersten Mal vom Hauptmenü zum Ebenenauswahlbildschirm wechselte). Jedes Bild aus jedem MovieClip wurde in einem separaten BitmapData-Objekt gespeichert. Natürlich war die Lösung sehr "ungeschickt", aber für ein einfaches Flash-Spiel hat es gut funktioniert.

In der Version des Spiels für Steam (und später möglicherweise für mobile Plattformen) ist diese Option aus zwei Gründen nicht geeignet:

1. Eine große Menge an belegtem Speicher nach der Rasterung. Daten in MovieClip in Starling werden durch eine Reihe von Texturen geleitet. Eine Textur kann nicht nur aus einer Datei geladen, sondern auch mit Daten aus BitmapData erstellt werden. In diesem Fall sollte jedoch beachtet werden, dass Starling (genauer gesagt die Stage 3D, auf der es basiert) Texturen mit einer Höhe und Breite verwendet, die einer Potenz von zwei entsprechen. Das heißt Ein Bild mit einer Größe von 130 x 160 Pixel hat eine Größe von 256 x 256 Pixel.

2. Ein weiterer Nachteil ist die große Anzahl von Draw Calls. Glücklicherweise verfügt Starling über eine automatische Stapelverarbeitung von Bildern (Ausgabe mehrerer Sprites in einem Aufruf an die Grafik-API), wenn sie sich in derselben Textur befinden.

Lösung: die Verwendung von Texturatlanten.

Ursprünglich war geplant, mithilfe von DynamicTextureAtlas im Handumdrehen Atlanten zu generieren , und alle Grafiken des Spiels sollten in Vektorform gespeichert werden.

Nach einem Testlauf stellte sich heraus, dass die Ressourcen eines Flash-Spiels (in Form von swc - einer Klassenbibliothek mit geschlossenem Quellcode) eine klar definierte Struktur haben sollten, die für bestehende Entwicklungen nicht geeignet war. Es stellte sich außerdem heraus, dass das Konvertieren eines Vektors in ein Raster (tatsächlich wird jedes Objekt Frame für Frame gerendert, und es werden Flash-Tools verwendet) viel Zeit in Anspruch genommen. Je größer das Objekt im Spiel ist, desto länger dauert die Rasterung (es ist klar, dass die Größen aller Elemente in Pixel für Bildschirme mit einer Auflösung von 800x480 und 1920x1080 unterscheiden sich erheblich).

Tatsächlich hat dies alle Vorteile der Verwendung von Vektorgrafiken zunichte gemacht, nämlich die Skalierbarkeit ohne Qualitätsverlust. Es gab nur einen Ausweg - klassisch - mit vorgefertigten Texturatlanten.

Von der Animation bis zu Partikeln


Nach dem Speichern aller Grafiken in Form von PNG-Dateien und dem Erstellen von Atlanten stellte sich heraus, dass etwa 70% des Speicherplatzes von Frames mit verschiedenen Effekten belegt sind, und dies häufig recht einfach. Die Lösung des Problems lag auf der Hand - das Ersetzen volumetrischer Animationen (die aus einem Vektor transformiert wurden) in Animationen, die aus Komponenten erstellt wurden. Dies führt zu einer erheblichen Platzersparnis, da beispielsweise der Effekt einer Sternexplosion (siehe unten), die Frame für Frame gespeichert und in einem Atlas platziert wird, eine Textur mit einer Größe von 1024 x 1024 Pixeln belegt, die 4 MB Speicher belegt, während die Komponenten der Animation insgesamt ausmachen belegen nicht mehr als 128x128 Pixel.

Ein Beispiel für einen Teil eines Texturatlas mit separaten Animationsrahmen:



Und die Bestandteile der Effekte:



Erstellen Sie einen Partikeleditor


Anfangs hatte ich vor, die Basiserweiterung für Starling (Partikelsystem) zu verwenden, aber nach dem Sammeln des Testprojekts fand ich eine Reihe von Dingen:

1. Selbst die umfangreichste Auswahl an Einstellungen gibt nicht an, was Sie selbst im Code ändern können. Zum Beispiel die Formel zum Ändern der Fluggeschwindigkeit des Partikels.

2. Der Editor ist in erster Linie für eine realistische Darstellung konstanter Partikelquellen „eingesperrt“. Ein Beispiel ist die Flamme einer brennenden Kerze. In unserem Spiel sind die meisten Effekte Explosionen.

Ein Beispiel für einen Effekt aus dem Partikelsystem-Editor:



Als Ergebnis wurde beschlossen, einen selbst geschriebenen Effekt-Editor zu verwenden.

Vorteile - Die Möglichkeit, nicht nur ein Partikelsystem zu verbinden, sondern auch Spritesubstrate mit variablem Skelett, Rotationsgeschwindigkeit und Alpha sowie eine Reihe von Parametern hinzuzufügen, die auf den Wünschen des Designers basieren. Jeder der Effekte bestand aus mehreren Schichten. 3 untere Ebenen - für einzelne Sprites, die ihre Skalierung, ihren Drehwinkel und ihre Transparenz ändern. 3 obere - in der Regel für Partikel - fliegen von einem Punkt aus.



Beispiele für Effekte

Vergleich von Effekten aus der Flash-Version mit denen aus dem Editor:

1. Explosionsanimation (links - Flash-Version):



2. Animation zum Aufnehmen eines Objekts (Stern), links - Flash:



Ein separates Plus der Partikelversion ist das benutzerdefinierte Element der Zufälligkeit - jede Explosion / jeder Effekt (desselben Typs) sieht anders aus, weil Die Anzahl der Partikel, ihre Größe und Geschwindigkeit variierten innerhalb bestimmter im Editor festgelegter Grenzen.

Bildverarbeitungseffekte


Ein weiteres Plus bei der Arbeit mit Starling sind die sofort einsatzbereiten Bildverarbeitungseffekte. Diese Effekte im Spiel werden an mehreren Stellen verwendet, z. B. nach dem Gewinnen und dem Erscheinen des Ergebnismenüs. Der Level-Hintergrund selbst (und die darauf verbleibenden Objekte) ändern sich allmählich.

Anfangs wollten wir, wie in der Flash-Version, einen Effekt erzielen, wenn das Level-Bild durch Drehen im Uhrzeigersinn allmählich „unscharf“ wird (dies alles geschieht „im Hintergrund“ unter dem Level-Ergebnismenü). Aber in der Version mit Starling hat die Nutzung dieses Effekts die fps selbst in der PC-Version des Spiels sehr stark reduziert (von 50-60 auf 2-3 Frames pro Sekunde).



Stattdessen wurde beschlossen, den „Fading“ -Effekt zu verwenden (der sich von links nach rechts und von oben nach unten durch die Elemente schlängelt), um die Transparenz des Objekts und die Daten der ColorMatrixFilter-Filtermatrix zu ändern, sodass wir einen ziemlich spektakulären Effekt ohne FPS-Drawdown erzielen konnten.



Schlussfolgerungen


Zusammenfassend kann ich sagen, dass der Designer und Programmierer mit dem gesamten Flash-Ökosystem "dieselbe Sprache sprechen" können, wenn Sie Grafiken erstellen und polieren. Auf diese Weise können Sie den kleinen Dingen, die die Atmosphäre des Spiels erzeugen, und den Leistungsproblemen, die bei "ungeschickt" auftreten, mehr Aufmerksamkeit schenken. Entscheidungen sind gezwungen, nach Problemumgehungen zu suchen und manchmal einige Konzepte zu ändern, was häufig dem Endprodukt zugute kommt.

Jetzt auch beliebt: