In dieser Artikelserie werde ich darüber sprechen, wie und warum wir beschlossen haben, eine eigene Lösung für den Import von Flash-Animationen in Unity zu erstellen, über Optimierungen und die interne Küche des resultierenden Plug-Ins. Und auch im Programm: eine Geschichte über die Innenseiten des SWF-Formats, die Funktionen der Unity-Editor-Erweiterung und allgemein über Animationen im Allgemeinen. Ich bitte um einen Schnitt!

Einführung
Zu Beginn eines jeden Projekts stehen für viele seiner Teile die Qualen der Wahl der Technologie. Ein solcher Teil ist das Animationssystem. Es gibt mehrere Variablen, von denen diese Auswahl abhängt. Erstens, mit was sind Ihre Animatoren gearbeitet (können) oder welche Werkzeuge dieser Animatoren sind für Sie leichter zu finden. Es ist klar, dass es keinen Sinn macht, ein äußerst spezifisches Produkt zu wählen, denn wenn derzeitige Mitarbeiter aus dem einen oder anderen Grund (einem plötzlichen Bus?) Verlassen, wird es äußerst schwierig sein, sie zu ersetzen. Ein Teil des Projekts wird einfach auf unbestimmte Zeit eingestellt, was im Fall eines kommerziellen Produkts der Fall ist kann sehr teuer sein. Die zweite Variable ist technischer: Integration in Ihren Motor. Gibt es Lösungen von Drittanbietern und die Qualität dieser Lösungen, gibt es irgendeine Stärke und Fähigkeit, meine eigenen zu erstellen, sowie die Produktivität und den Komfort all der oben genannten. Nun, die dritte Variable sind die Funktionen dieses Tools. Wenn Sie, Nasenbluten, eine inverse Kinematik benötigen, ist es absolut seltsam, eine Animation ohne Skelett zu wählen.
Arten von 2D-Animationen
Betrachten Sie die beliebtesten Optionen zum Implementieren von Animationen in Spielen. Ich werde nur über 2D-Animationen, 3D-Animationen sprechen - dies ist das Thema einer völlig anderen Konversation, Ansätze und Werkzeuge. Sie können einen Abschnitt ohne Angst überspringen, wenn Sie in diesen Angelegenheiten versiert sind (es wird keine Enthüllungen und keine Zusammenbrüche geben) oder wenn Sie nur Funktionen von Flash-Animationen betrachten möchten.
Rahmenanimationen
Unser Mini-Review beginnt mit der einfachsten und ältesten Art von Animation: Einzelbildanimation. Jedes Bild einer solchen Animation wird durch ein separates Bild dargestellt, bei dessen schneller Änderung eine Illusion von Bewegung entsteht.
Vorteile:
Eine elementare Implementierung, normalerweise in jeder Engine. Jede Komplexität und jeder Stil von Animationen, zumindest einen Film auslegen und in Frames einfügen (theoretisch natürlich). Beliebige Werkzeuge: Fast alles kann Ihnen eine Folge von Rahmen geben, die bei Bedarf in einen Texturatlas eingeklebt werden können.
Nachteile:
Das Hauptminus ist natürlich die Größe dieses Materials im Speicher. Natürlich gibt es alle möglichen Tricks, wie das Schneiden von Frames in Blöcke und das anschließende Wiederverwenden wiederholter Blöcke, das Laden von Frames von der Festplatte im Hintergrund und das Freigeben der bereits gezeigten und andere. Aber diese Tricks haben ihre Nachteile. Block Slicing - nur für Pixelkunst und Hintergrundladen geeignet - erzeugt eine zusätzliche Last auf der Festplatte, nimmt viel Speicherplatz auf dieser Festplatte selbst ein und die Größe Ihres Spiels sowie die Menge der heruntergeladenen Daten, die gestartet oder aktualisiert werden sollen, nehmen zu.
Gesamt:
Nur für kleine Größen und Anzahl der Frames geeignet, ideal für Pixelkunst und den Stil von Retro-Spielen a la NES .
Videoanimationen
Als Apotheose des Wahnsinns von Einzelbildanimationen erscheinen Videoanimationen. Und ja, es wird verwendet und sogar gelegentlich an den Ort. Wir haben dies für Spiele im Genre " Wimmelbild " für große und komplexe Animationen sowie für Schnittszenen mit einem Hauch von Realismus implementiert. Mit Hilfe von Codecs wie theora und vp8 können Sie selbst erträgliche Videoanimationen (und sogar mit einem Alphakanal ) selbst implementieren.
Die Pluspunkte hier sind natürlich, dass Sie in solchen Animationen alles zeigen können, was Ihr Herz begehrt, von gerichteten Szenen unter Beteiligung realer Schauspieler bis hin zu gerenderten 3D-Schlachten. Die Nachteile sind die wilde Belastung der CPU beim Decodieren und natürlich die Bildqualität. Sie können in sehr begrenzten und spezifischen Fällen einen Kompromiss zwischen Qualität und Leistung finden, wie beispielsweise in den oben für Hidden Object angegebenen Spielen.
Im Allgemeinen ist es bei weitem nicht für jeden geeignet und bei weitem nicht oder eher fast nie, wenn wir gerenderte Schnittszenen nicht berücksichtigen - wo ist der Ort für solche „Animationen“? Eine gute Implementierung solcher Animationen kann sich auch nicht der Einfachheit rühmen, es gibt viele Nuancen und Tricks, sowohl hinsichtlich der Qualität des Ausgabebildes als auch der empfangenen Lasten auf dem Zentralprozessor. Aufgrund der Spezifität gibt es nur wenige vorgefertigte Implementierungen, sie unterscheiden sich auch nicht in der Qualität oder sie kosten viel Geld (hi, Bink_Video ), so viele schreiben ihre eigenen.
Skelettanimationen
Also kamen wir zu den beliebten und modernen Arten von 2D-Animationen. Skelettanimationen erobern immer mehr die Herzen und Gedanken von Entwicklern im Bereich 2D und werden zur Standardanimation für Spiele. Es ist lustig, dass sie in 2d vor relativ kurzer Zeit so weit verbreitet waren, im Gegensatz zu 3d, wo sie während der Zeit von King Peas auftraten, als die Väter Half-Life schrieben. Die Essenz von Skelettanimationen liegt seltsamerweise im Skelett, das einen Animator aus Knochen erzeugt, die durch eine Baumstruktur miteinander verbunden sind. Fragmente werden in Form von separaten Bildern an den Knochen befestigt. Die gesamte Struktur wird durch Verschiebungen und Rotationen der Knochen relativ zueinander in Bewegung gesetzt. Die Verschiebungen und Rotationen der Knochen im Skelett folgen der allgemeinen Animationszeitleiste.
Die Vorteile liegen auf der Hand: Wir müssen nicht jedes Bild der Animation in Form von separaten Bildern speichern, sondern nur Fragmente (z. B. die Arme und Beine des Charakters), mit denen wir die Knochen des Skeletts bewegen. Es gibt ausgezeichnete Implementierungen dieser Art von Animation mit Laufzeiten für die erforderlichen Plattformen und Engines, zu einem angemessenen Preis oder sogar kostenlos: Spine , Spriter , Anima2D , DragonBones und andere. Dank des Skeletts und seiner Funktionen ist es möglich, eine kolossale Glätte der Animationen zu erreichen, indem die Positionen seiner Knochen interpoliert werden, Übergänge von Animation zu Animation gemischt und sogar zwei verschiedene Animationen gemischt werden: Schießen auf der Flucht, Schießen auf Schleichen und so weiter. Ich werde nicht alle Möglichkeiten der Skelettanimation auflisten, es gibt wirklich viele davon und sie sind sehr cool. Ich gebe besser einen Link an, auf dem sie deutlich mit Bildern und Beschreibungen auf der Website von Spine angezeigt werden .
Es sieht aus wie eine Silberkugel, aber nein. Es gab einige Minuspunkte. Machen Sie sofort einen Vorbehalt, dass für viele Projekte und Animationen diese Nachteile möglicherweise nicht bestehen. Wenn Skelettanimationen zu Ihnen passen - es ist großartig, verwenden Sie sie, sie sind schön und modern.
Kommen wir zurück zu den Minuspunkten. Eine zusätzliche Phase bei der Erstellung von Animationen ist das Rig (oder das Rigging, wie viele Begriffe in unserer Branche, wurde ebenfalls russifiziert). Die Entstehung des Skeletts und die Bindung von Knochen an Fragmente. Wenn das Objekt eine Animation hat und nicht mehrere, wie zum Beispiel den Charakter des Spiels im Genre " Platformer ", ist die Bühne völlig überflüssig. Nicht alle Animationen werden bequem mit Knochen animiert. Es gibt viele Animationen, bei denen die Knochen im Weg sind, und ohne sie ist es bequemer und schneller, sowohl in Bezug auf die Erstellung als auch in Bezug auf die Spieleleistung. Ein separater Artikel werde ich Spezialisten auf dem Markt herausnehmen. Ihre Zahl wächst mit der Popularität der Skelettanimation, aber es ist immer noch keine leichte Aufgabe, sie in Ihrem Team zu finden. Die Verbreitung von Werkzeugen und Werkzeugen wirkt sich auch darauf aus, dass jemand daran gewöhnt ist und eins verwendet, jemand anderes, es ist notwendig, unterwegs umzuschulen, was zusätzliche Schwierigkeiten bei der Suche und Schulung von Mitarbeitern schafft.
Timeline-Animationen
Ich habe diese Art von Animation bis zum Ende geführt, nicht weil sie besser ist als alle anderen, sondern weil es nur die Flash-Animationen über die Innenseiten sind, die im technischen Teil des Artikels behandelt werden. Flash ist nicht der einzige Vertreter dieser Art von Animation, aber sicherlich ihr Anführer, daher wird alles in Bezug darauf beschrieben. Timeline-Animationen bestehen aus Fragmenten, die in separaten Ebenen auf einer Timeline animiert werden. Fast das gleiche, was wir in der Skelettanimation gesehen haben, aber ohne Skelett. Entsprechend den Keyframes auf der Timeline können wir diese Frames verschieben, drehen, ersetzen, neue Fragmente in diese Frames zeichnen und natürlich Silbentrennung, Skalierung und Rotation zwischen ihnen interpolieren. Das heißt, wir bewegen nicht die Knochen mit den angehängten Fragmenten, sondern die Fragmente selbst. Natürlich verlieren wir viele der Möglichkeiten, die uns Skelettanimationen bieten, aber nicht jeder braucht sie. Im Gegenzug erwerben wir andere, wie zum Beispiel:
- die Fähigkeit, neue Fragmente in der Mitte der Animation zu zeichnen und einzufügen;
- kein Rig, keine Knochen, die manchmal nur stören;
- Adobe Flash (jetzt Adobe Animate ) ist das älteste und bewährte Animationswerkzeug seit Jahren. Eine sehr große Anzahl von Animatoren besitzt es auf die eine oder andere Weise.
- Die Möglichkeit, alte Animationen beim Übersetzen Ihrer Flash-Projekte in Unity zu verwenden, einschließlich Animationen, die in Vektorgrafiken und nicht nur in Rastergrafiken erstellt wurden .
Ist der Blitz tot? Als Spieler in Browsern - sicherlich als Werkzeug für Animationen - gibt es keine Alternativen und wird nicht erwartet. Nachteile? Natürlich. Das Hauptminus ist, dass dies keine Skelettanimation ist, nicht wahr? Wir haben keine Möglichkeit, Animationen miteinander zu mischen. Wir haben keine inverse Kinematik und ähnliche Fähigkeiten, die nur dem Skelett eigen sind. Aber wir haben Zeitleisten ineinander verschachtelt sowie Raster- und Vektormasken! Alle Animatoren lieben Masken! Hier ist zu erwähnen, dass in Spine zu kürzlich Clipping- Funktionen erschienen sind, die jedoch bisher nur geometrisch und im Vergleich zu Blitzmasken sehr begrenzt sind.
Zusammenfassung des Animationstyps
Natürlich habe ich nicht alle Arten von Animationen aufgelistet, nur die wichtigsten. Zum Beispiel wurden die sogenannten prozeduralen Animationen zurückgelassen, wenn Objekte oder ihre Fragmente nur durch Code in Bewegung gesetzt werden, aber es nicht möglich ist, sie mit anderen zu kontrastieren, und ich wollte den Artikel nicht wirklich aufblasen, es ist besser, etwas spezielleres auf Animationen zu sehen um das Bild zu vervollständigen.
Zusammenfassend. Wie immer und in fast allem gibt es keine Silberkugel. Sie müssen das Projekt, die Aufgaben und die Personen auswählen. Schließlich hindert niemand jemanden daran, eine Art von Animation zu verwenden. Überall gibt es Projekte, bei denen alle Arten von Animationen gleichzeitig verwendet werden und alle glücklich sind. Schnittszenen - Video, Charaktere - Skelett, Szenerie - Zeitachse, Emitterflüge von Partikelsystemen - prozedural, die Partikel selbst in ihren Systemen - Bild für Bild. Wir nehmen das Beste aus jedem Typ.
Die Qual der Wahl und die Entscheidung, selbst zu schreiben
Aus objektiven Gründen haben wir beschlossen, dass wir für unser Projekt Flash-Animationen benötigen. Es stellte sich die Frage, ob sie in den Motor integriert werden sollen. Nachdem wir verschiedene Optionen für Plugins ausprobiert hatten, entschieden wir uns für eine, die zu ihren Fähigkeiten passte, lebendig und unterstützend war und auch einen völlig unbescheidenen Preis für eine Lizenz zwischen Lizenzen hatte, aber Sie können ein gutes Produkt tolerieren. Ich werde absichtlich keine Namen nennen, um niemandem Werbung oder Anti-Werbung zu machen.
Mit diesem Plugin lebten wir fast ein Jahr in der Entwicklung, in der die Details geklärt wurden, die wir nicht weiter verwenden konnten. Die Qualität seiner Integration in die Einheit. Dies alles führte zu ehrlich gesagt schwerwiegenden Fehlern, von denen nicht gesagt werden konnte, dass sie einfach, schnell und ohne einen Kampf seitens der Entwickler behoben werden konnten, und zu einer schrecklichen Leistung auf den Zielgeräten, und wir haben immer noch das iPad 2- Level. Dies geschah aufgrund der ungebildeten Integration in eine bestimmte Engine, der Unkenntnis ihrer Besonderheiten und Fallstricke. Wir waren mehr als zufrieden mit den Möglichkeiten, aber die Quellcodes weigerten sich, selbst in persönlicher Reihenfolge, zu öffnen, und es wurde beschlossen, unsere Entscheidung zu schreiben.
Ich hatte einige ziemlich erfolgreiche Erfahrungen mit dem Schreiben von Erweiterungen für Unity und wenig Erfahrung mit dem Konvertieren von Flash-Animationen in meine Formate. Letzteres ist lange her, aber etwas wurde zurückgerufen. Am selben Ort wurde beschlossen, alles als Heimprojekt zu schreiben, um nicht vom Projekt oder von der Firma abhängig zu sein, in der ich arbeite, und um ehrlich zu sein, wollte ich auch mein eigenes Produkt haben. Ausgerüstet mit einer 250-seitigen SWF-Format-Spezifikation ging ich in die Schlacht.
Exportoptionen
Zunächst lohnt es sich, Optionen zum Exportieren von Animationen aus dem Flash-Editor zu diskutieren. Es gibt mehrere von ihnen, natürlich mit ihren Vor- und Nachteilen. Lassen Sie uns die wichtigsten durchgehen.
.xfl-Format
Im Flash-Animationseditor ist es möglich, die Animationsquelle in einem unkomprimierten .xfl-Format anstelle des standardmäßig angebotenen geschlossenen .fla-Formats zu speichern. Das Format ist recht einfach, aber nicht dokumentiert. Es besteht aus mehreren verschachtelten Verzeichnissen und einer Reihe von XML-Dateien, in denen alle Zustände der darin gespeicherten Clips beschrieben werden. Das Beschreibungsformat ist ebenfalls einfach und klar, hier ein Beispiel:
static_clip.xml
<DOMSymbolItem name="static_clip" itemID="5c719f28-00000051" lastModified="1550950184"> <timeline> <DOMTimeline name="static_clip"> <layers> <DOMLayer name="Layer_1" color="#00FFFF" current="true" isSelected="true"> <frames> <DOMFrame index="0" keyMode="9728"> <elements> <DOMBitmapInstance selected="true" libraryItemName="bitmap.png"/> </elements> </DOMFrame> </frames> </DOMLayer> </layers> </DOMTimeline> </timeline> </DOMSymbolItem>
Link zur QuelleHier haben wir einen statischen Clip static_clip
mit einer Ebene Layer_1
und einem Frame, in dem sich eine Bitmap namens bitmap.png
.
movie_clip.xml
<DOMSymbolItem name="movie_clip" itemID="5c719f30-00000053" lastModified="1550950713"> <timeline> <DOMTimeline name="movie_clip"> <layers> <DOMLayer name="Layer_1" color="#00FFFF" current="true" isSelected="true"> <frames> <DOMFrame index="0" duration="4" tweenType="motion" motionTweenSnap="true" keyMode="22017"> <elements> <DOMSymbolInstance libraryItemName="static_clip"> <matrix> <Matrix tx="-50" ty="-50"/> </matrix> <transformationPoint> <Point x="28.5" y="27.5"/> </transformationPoint> </DOMSymbolInstance> </elements> </DOMFrame> <DOMFrame index="4" tweenType="motion" motionTweenSnap="true" keyMode="22017"> <elements> <DOMSymbolInstance libraryItemName="static_clip" centerPoint3DX="128.5" centerPoint3DY="127.5"> <matrix> <Matrix tx="100" ty="100"/> </matrix> <transformationPoint> <Point x="28.5" y="27.5"/> </transformationPoint> </DOMSymbolInstance> </elements> </DOMFrame> </frames> </DOMLayer> </layers> </DOMTimeline> </timeline> </DOMSymbolItem>
Link zur QuelleHier beschreiben wir den Animationsclip movie_clip
, der zwei Keyframes mit den Indizes 0 bzw. 4 enthält. Die Frames enthalten unseren statischen Clip static_clip
an den Koordinaten (-50;-50)
und (100;100)
. Zwischen Frames gibt es Bewegungs-Tween (prozedurale Animation, in unserem Fall nur eine Übertragung ohne Skalierung und Drehung). Die Position eines statischen Clips zwischen Keyframes kann durch lineare Interpolation von Koordinaten aus diesen Frames erhalten werden.
Natürlich wird alles in echter Animation sein, ähm ... etwas komplizierter und umfangreicher, aber Sie können alles ohne Dokumentation herausfinden. Es scheint, dass es hier Glück ist. Und ich kenne mehrere Projekte und Unternehmen, die diesen Weg recht erfolgreich gegangen sind, aber mit einigen Einschränkungen und Schwierigkeiten. Diese Schwierigkeiten sind die Fliege in der Salbe .xfl, nämlich:
- Tweens (Tweens, so russifiziert er konnte) sind sehr unterschiedlich, sowohl einfach: mit linearer Interpolation als auch komplexer: mit benutzerdefinierten Funktionen und Graphen dieser Interpolation, Morphing von Vektorgrafiken auf Zwillingen, mit ihren eigenen Regeln nur für Makromedia und Adobe;
- Vektorgrafiken werden wie alle Animationen mit Ausnahme von Rastergrafiken beispielsweise in Textform beschrieben. Dementsprechend ist es notwendig, einen eigenen Rasterizer zu schreiben, was aufgrund der Komplexität und Merkmale des Vektors im Flash in der Praxis nicht möglich ist.
- Die Regeln für das Abspielen von Animationen, einschließlich verschachtelter Animationen, müssen Sie sich von Grund auf neu überlegen. Es gibt keine Dokumentation dafür und wann welcher Frame angezeigt werden soll, was in welchen Situationen zu optimieren ist und was ohne Interpolation zu belassen ist - es muss noch durch lange Experimente bestimmt werden, um alle möglichen Fälle abzudecken Testläufe, die für eine allgemeine und keine private Lösung eine nicht triviale Übung sind.
Dies sind nicht alle Schwierigkeiten dieses Ansatzes, aber sie reichen aus, um zu verstehen, dass eine allgemeine Lösung nur mit starken Vorbehalten geeignet ist. Es war einmal, als ich diesen Weg für eines der Projekte eingeschlagen habe, an denen ich teilgenommen habe. Es gab Flash-Schnittszenen mit klassischen Zwillingen (ohne benutzerdefinierte Interpolationsregeln und spezielle Funktionen dieser Interpolation), nur Bitmap-Grafiken und ohne andere erweiterte Funktionen, die der Flash-Editor bietet. Die private Lösung wurde recht schnell und effizient geschrieben, aber die Animatoren mussten stark eingeschränkt werden, damit sie nichts mehr oder weniger kompliziertes verwendeten. Der Ansatz hat das Recht auf Leben und es gibt mehrere Bibliotheken mit unterschiedlichem Grad an Vernachlässigung, basierend darauf, aber wie gesagt, mit vielen Vorbehalten und Einschränkungen.
.jsfl-Skripte
Eine andere, fast funktionierende Option besteht darin, Informationen über unsere Animationen zu erhalten. Mit jsfl-Skripten können Sie den Flash-Editor erweitern, mit seiner Umgebung interagieren, die Animation ändern und natürlich alle erforderlichen Informationen zu Zeitleisten, Ebenen, Clips und Frames darin abrufen. Und es wird auch von Animatoren verwendet, um verschiedene Aktionen zu automatisieren, aber dies ist eine Geschichte aus einem benachbarten Buch. Im Allgemeinen ist der Ansatz mit allen Nachteilen des vorherigen Ansatzes ausgestattet, daher werde ich nicht weiter darauf eingehen. Ich kann nur sagen, dass Sie damit unsere gesamte Animation in Form von beispielsweise Einzelbildanimationen entladen können, und dies ist nicht der Weg eines echten Jedi (aber natürlich) findet in einigen Projekten statt). Wir werden in dem von mir gewählten Ansatz auf diese Skripte zurückkommen: Vektorgrafiken rastern und ausgelagerte Animationen optimieren.
AIR-Anwendung
Dieser Ansatz funktioniert jedoch bereits und kann so verwendet werden, wie er sollte. Ich habe es nicht gewählt, aber als Referenz werde ich diese Option geben. Das Wesentliche des Ansatzes ist, dass wir eine AIR-Anwendung auf Flash selbst oder für Ästhetiker beispielsweise auf Haxe erstellen, die alle Informationen aus einer Animation abruft, die bereits in einem SWF-Format kompiliert wurde. Wir spielen die Animation Frame für Frame in unserer Anwendung ab, erhalten alle Frame-Informationen und speichern sie in dem Format, das wir für unsere Laufzeit benötigen. Hier werden alle oben genannten Probleme gelöst:
- Vektorgrafiken müssen nicht gerastert werden, die Flash-Laufzeit erledigt dies für uns. Es bleibt nur, diese Informationen abzurufen und das Rasterergebnis von Vektorfragmenten zu speichern.
- Der Flash-Player in der AIR-Anwendung muss keine Regeln für das Spielen und die benutzerdefinierte Doppelinterpolation festlegen. Er weiß genau, wie das geht, und erledigt fast alles für uns.
Als Bonus haben wir die Möglichkeit, Frame-Skripte in Animationen zu verwenden (alle Arten von play()
, stop()
und anderen gotoAndPlay()
, einige Animatoren lieben sie sehr). Der Nachteil ist die Unfähigkeit, die in den Flash selbst geloopten Animationen zu exportieren. Dies spielt jedoch keine Rolle, da Sie sie bereits in Ihrer Laufzeit schleifen können und die Animatoren bitten, alles darauf vorzubereiten.
Es ist erwähnenswert, dass ich sicher bin, dass alles etwas komplizierter sein wird, als es in meiner Beschreibung klingt, da ich persönlich nicht dorthin gegangen bin, sodass ich Ihnen die Details nicht sagen kann. Lassen Sie diejenigen, die diesen Weg gegangen sind, ihre Erfahrungen teilen, mit Vergnügen lesen wir über ihre Freuden und Schwierigkeiten!
Eigener Flash Player
Dies ist wahrscheinlich die ehrlichste, offensichtlichste und einfachste Option von allen, aber auch die schwierigste. Am Ende ist dies das, was ein echter Flash-Player tut, was die meisten von uns in ihrem Lieblingsbrowser als Ergänzung dazu haben. Beliebte Vertreter dieses Genres: gameswf und, gewachsen aus dem vorherigen, scaleform . Beide sind jetzt tot. Es ist interessant, dass sie hauptsächlich zur Implementierung der GUI in verschiedenen Projekten verwendet wurden, einschließlich AAA . Wir interessieren uns jedoch für die interne Struktur, nicht für die spezifischen Anwendungen toter Bibliotheken.
Jeder Flash-Player mit Selbstachtung hat mindestens Folgendes an Bord:
- Parser des SWF-Formats;
- Rasterizer-Vektorgrafiken;
- Implementierung einer virtuellen Maschine zum Ausführen von ActionScript- Code;
- Implementierung einer Standardbibliothek für Benutzercode;
In jedem dieser Punkte geht es darum, was passiert, wenn es möglich ist, es zu implementieren. Dann müssen Sie mehr als ein Team für diese Aufgabe wechseln und mehrere Jahre Entwicklungszeit auf die Mindestversion umstellen. Selbst die Implementierung einer kleinen Rolle, die ausreicht, um etwas zu spielen, wird viel Zeit in Anspruch nehmen, und die zusätzlichen Schwierigkeiten in Form so vieler undokumentierter Teile dieser gesamten Pipeline werden diese bereits große Zeit verdoppeln.
Ja, das Netzwerk ist voll von Versuchen, jeden dieser Teile zu implementieren, mit unterschiedlichem Grad an Vernachlässigung und Verschlechterung. Es ist jedoch nicht einmal möglich, diese Entwicklungen als Grundlage zu verwenden. Es wird nur Jahre dauern, um Fehler zu erkennen und ungeschriebene Komponententests zu schreiben, bevor festgestellt wird, dass dies nicht in vollem Umfang funktioniert. Diejenigen, die versucht haben, gameswf mit den notwendigen Fähigkeiten zu ergänzen, verstehen, wovon ich spreche. Ein ehrlicher Flash-Player muss Vektorgrafiken auch nicht im Voraus, sondern zur Laufzeit rastern, was sich auf einen solchen Leistungseinbruch auswirkt, dass nicht jedes Projekt überleben kann. Ich nutze diese Gelegenheit, um den Überlebenden, die Scaleform auf Mobilgeräten verwendet haben, meine Grüße zu übermitteln. Im Allgemeinen der düsterste und hoffnungsloseste Weg, nicht unsere Wahl.
Wir kombinieren Ansätze
Also kam ich endlich zu meiner Wahl. Nachdem ich die möglichen Wege untersucht hatte, wurde eine interessante Kombination für mich gezogen. Relativ einfach zu implementieren, für eine Person in der Lautstärke machbar und gleichzeitig funktional genug, um die Anforderungen der meisten 2D-Timeline-Animationen zu erfüllen.
Erstens werden wir die in swf kompilierte Animation verwenden, um keine verschiedenen Wiedergabeoptionen zu finden und fast nie zu erraten, wie der Flash Player von innen funktioniert, da wir nicht alle möglichen Fälle abdecken können, aber wir versuchen, eine allgemeine Lösung zu schreiben. Außerdem entfernt der Flash-Editor alle Zwillinge, die in der Animation verwendet wurden, und repräsentiert im kompilierten SWF geschickt die bloßen Positionen der Fragmente.
Zweitens verbieten wir die Verwendung von Skripten in Animationen. Ja, dies ist eine sehr schwierige und traurige Anforderung, aber ich habe kein Team von Programmierern, um eine ehrliche virtuelle Maschine und eine Standardbibliothek zu implementieren, die ich fast blind schreiben müsste. Hier ist natürlich das Minus meines Ansatzes gegenüber dem Ansatz sichtbar, bei dem die AIR-Anwendung verwendet wurde, da in letzterem einige Skripte für die interne Animationswiedergabe verwendet werden könnten. Auf der anderen Seite wird die Erstellung guter Animationen nicht beeinträchtigt. Um benutzerdefinierte Informationen aus der Animation in das Spiel zu übertragen, können Sie die sogenannten frame labels
, die im Code sichtbar sind, und benutzerdefinierte Ereignisse in Form von Rückruffunktionen, die bereits zur Laufzeit verwendet werden, an bestimmte Frames hängen.
Drittens müssen wir nicht mehr unseren eigenen Rasterizer für Vektorgrafiken schreiben, da wir keinen für den allgemeinen Fall schreiben können, um alle Optionen und Funktionen des Vektors in Flash abzudecken. Stattdessen werden wir die Grafiken mithilfe eines jsfl-Skripts in (!) Compilation rasteren. Gleichzeitig optimieren wir mithilfe dieses Skripts unsere Vektorgrafiken, indem wir statische Clips zu einem Bild zusammenführen, die resultierenden Bitmap-Bilder für unsere Anforderungen reduzieren oder erhöhen: Qualität und / oder Leistung. Hier sei auch auf die verschiedenen Optionen für die Qualität / Auflösung von Kunstwerken für Geräte mit unterschiedlichen Pixeldichten auf dem Bildschirm (z. B. HD- und SD-Kunstwerke) hingewiesen.
Der Abschluss des lyrischen Teils
Damit ist der erste Teil des Artikels abgeschlossen. Im zweiten Teil werden technische Implementierungsdetails, Codeteile, Bilder (!), Optimierungen, Tricks und Tricks aufgeführt. Verpassen Sie es nicht, wenn Sie bald auf Ihren Bildschirmen erscheinen! Am Ende werde ich einige interessante Links mit Informationen zur Verwendung von Flash-Animationen von Kollegen geben, zum Glück von ZeptoLab und Playrix .