Was ist der beste Ansatz, um ein bereits vorhandenes Projekt von Flash 7/AS2 auf Flex/AS3 zu verschieben?

StackOverflow https://stackoverflow.com/questions/46136

Frage

Ich habe eine große Codebasis, die auf Flash 7 abzielt, mit einem viel von AS2-Klassen.Ich hoffe, dass ich Flex für alle neuen Projekte verwenden kann, aber viele neue Dinge in unserer Roadmap sind Ergänzungen zum alten Code.

Die Syntax für AS2 und AS3 ist im Allgemeinen dieselbe, daher frage ich mich langsam, wie schwierig es wäre, die aktuelle Codebasis auf Flex/AS3 zu portieren.Ich weiß, dass alle UI-bezogenen Dinge zweifelhaft wären (derzeit wird die UI zur Laufzeit mit vielen Dingen wie createEmptyMovieClip() und attachmentMovie() generiert), aber die UI- und Controller-/Modell-Sachen sind größtenteils getrennt.

Hat jemand versucht, eine große Codebasis von AS2-Code auf AS3 zu portieren?Wie schwierig ist es?Auf welche Fallstricke sind Sie gestoßen?Irgendwelche Empfehlungen für Ansätze zur Durchführung dieser Art von Projekt?

War es hilfreich?

Lösung

Einige bemerkenswerte Probleme, die mir aufgefallen sind, als ich versuchte, eine große Anzahl von AS2-Klassen in AS3 zu konvertieren:

Paketbenennung

class your.package.YourClass
{
}

wird

package your.package
{
    class YourClass
    {
    }
}

Importe sind erforderlich

Sie müssen alle verwendeten externen Klassen explizit importieren – es reicht nicht mehr aus, auf sie mit ihrem vollständig qualifizierten Namen zu verweisen.

Schnittstellenmethoden können nicht als „öffentlich“ gekennzeichnet werden.

Das macht absolut Sinn, aber AS2 lässt Sie das zu, sodass Sie, wenn Sie welche haben, diese entfernen müssen.

Explizites Schlüsselwort „override“.

Alle Funktionen, die eine übergeordnete Klassenfunktion überschreiben, müssen mit deklariert werden überschreiben Schlüsselwort, ähnlich wie C#.Wenn Sie über Schnittstellen verfügen, die andere Schnittstellen erweitern und Funktionen neu deklarieren, müssen diese Überschreibungen ebenfalls entfernt werden (wiederum wie bei öffentlich, diese Notation ergab sowieso keinen Sinn, aber AS2 ließ es zu.

Alle in Flash integrierten Dinge haben sich geändert

Sie haben oben darauf hingewiesen, aber jetzt ist es soweit Flash.Anzeige.MovieClip statt nur Filmausschnitt, Zum Beispiel.In dieser Kategorie gibt es viele Besonderheiten, und ich bin nicht weit genug gekommen, um sie alle zu finden, aber hier wird es viel Ärger geben.

Abschluss

Ich konnte an dieser Konvertierung nicht bis zum Erfolg arbeiten, konnte aber innerhalb weniger Stunden ein schnelles C#-Tool schreiben, das jeden Aspekt dieser Konvertierung außer dem erledigte überschreiben Stichwort.Die Automatisierung der Importe kann schwierig sein – in meinem Fall beginnen die von uns verwendeten Pakete alle mit einigen Paketen auf Root-Ebene, sodass sie leicht zu erkennen sind.

Andere Tipps

Zunächst einmal hoffe ich, dass Sie es nicht verwenden eval() in Ihren Projekten, da es in AS3 kein Äquivalent gibt.

Eines der Dinge, die ich tun würde, wäre, es durchzugehen Adobes Migrationsleitfaden (was im Grunde nur eine detaillierte Liste dessen ist, was sich geändert hat) Element für Element und versuchen Sie herauszufinden, ob jedes Element durch einen einfachen Such- und Ersetzungsvorgang (möglicherweise mithilfe eines regulären Ausdrucks) geändert werden kann oder ob es einfacher ist, die Vorkommen einfach manuell zu bearbeiten um AS3 zu entsprechen.Wahrscheinlich ist es in vielen Fällen (insbesondere, wenn, wie Sie sagten, die Menge des zu migrierenden Codes recht groß ist) am besten, wenn Sie die Änderungen per Skript vornehmen (d. h.mithilfe von Regex-Suchen und Ersetzen) und manuelles Beheben aller Grenzfälle, in denen die automatisierten Änderungen fehlgeschlagen sind.

Seien Sie bereit, etwas Zeit für das Debuggen und das Durchlaufen einiger Testfälle einzuplanen.

Außerdem ist der Versuch, AS2-SWFs mit AS3-SWFs zu kombinieren, wie andere bereits erwähnt haben, keine gute Idee und funktioniert auch nicht wirklich, sodass Sie auf jeden Fall den gesamten Code in einem Projekt auf einmal migrieren müssen.

Hier sind einige zusätzliche Referenzen für den Wechsel von AS2 zu AS3:

Grant Skinners Einführungs-AS3-Workshop-Diadeckhttp://gskinner.com/talks/as3workshop/

Lee Brimelow:6 Gründe, ActionScript 3 zu lernenhttp://www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html

Colin Moock:Essential ActionScript 3 (gilt als die „Bibel“ für ActionScript-Entwickler):http://www.amazon.com/Essential-ActionScript-3-0/dp/0596526946

Mike Chambers

mesh@adobe.com

Ich habe die Erfahrung gemacht, dass die Migration auf AS3 am besten in zwei Phasen erfolgt – erstens strukturell und zweitens syntaktisch.

Führen Sie zunächst Refactoring-Runden durch, bei denen Sie in AS2 bleiben, aber so nah wie möglich an die AS3-Architektur herankommen.Dazu gehört natürlich auch das Verschieben aller Ihrer Frame-Skripte und #include-Skripte in Pakete und Klassen, aber Sie können auch subtilere Dinge tun, wie zum Beispiel alle Ihre Ereignis-Listener und Dispatcher so ändern, dass sie dem AS3-Ablauf folgen (Verwendung statischer Klasseneigenschaften für Ereignistypen und Registrierung nach Methode). statt nach Objekt).Außerdem sollten Sie alle Ihre „eingebauten“ Ereignisse (z. B. onEnterFrame) entfernen und sich die nicht-triviale Mausinteraktion (z. B. Ziehen) und die Tastaturinteraktion (z. B. Erkennen, ob) genau ansehen eine Taste gedrückt wird).Diese Phase kann schrittweise durchgeführt werden.

Die zweite Phase besteht darin, von AS2 nach AS3 zu konvertieren – „_x“ in „x“ und alle APIs usw. zu ändern.Dies kann nicht inkrementell erfolgen, Sie müssen einfach so viel wie möglich auf einen Schlag erledigen und dann mit der Behebung aller Kompilierungsfehler beginnen.Aus diesem Grund gilt: Je mehr Sie in der ersten Phase tun können, desto mehr Schmerzen vermeiden Sie in der zweiten Phase.

Dieser Prozess hat bei mir bei einem einigermaßen großen Projekt funktioniert, aber ich sollte beachten, dass die erste Phase ein solides Verständnis der AS3-Struktur erfordert.Wenn Sie neu bei AS3 sind, müssen Sie wahrscheinlich versuchen, einige der Funktionen zu erstellen, die Sie für die Portierung benötigen.Wenn Ihr Legacy-Code beispielsweise Drag-and-Drop-Ziele verwendet, sollten Sie versuchen, dies in AS3 zu implementieren, um zu verstehen, wie sich Ihr Code strukturell ändern muss.Wenn Sie dann Ihr AS2 unter diesem Gesichtspunkt umgestalten, sollten die endgültigen Syntaxänderungen reibungslos verlaufen.

Die größten Fallstricke für mich waren die Teile, die das Anhängen, Duplizieren und Verschieben von MovieClips, das Ändern ihrer Tiefe usw. erforderten.All diese Dinge können nicht wirklich so umgestaltet werden, dass sie wie AS3 aussehen;Sie müssen einfach alles in die neuere Denkweise integrieren und dann mit der Behebung der Fehler beginnen.

Eine letzte Anmerkung: Über Dinge wie Import- und Override-Anweisungen würde ich mir wirklich keine Gedanken machen, zumindest nicht bis zur Automatisierung.Wenn Sie etwas verpassen, wird es vom Compiler abgefangen.Aber wenn Sie strukturelle Probleme übersehen, werden Sie viel mehr Schmerzen haben.

Die Migration eines größeren Projekts wie diesem von as2 ist mehr als nur ein einfaches Suchen und Ersetzen.Die neue Syntax ist ziemlich ähnlich und einfach anzupassen (wie lilserf erwähnte), aber nicht zuletzt die Tatsache, dass as3 strenger ist und das neue Ereignismodell höchstwahrscheinlich viele Probleme verursachen wird.Wahrscheinlich ist es für Sie besser, fast alles von Grund auf neu zu schreiben und dabei möglicherweise den alten Code als Richtlinie zu verwenden.

Die Migration von as2 -> as3 ist hinsichtlich des Wissens jedoch recht einfach.Wenn Sie objektorientiertes AS2 kennen, wird der Wechsel zu AS3 überhaupt kein Problem sein.

Sie müssen mxml immer noch nicht für Ihre Benutzeroberfläche verwenden, es sei denn, Sie möchten dies ausdrücklich.Mxml bietet nur eine schnelle Möglichkeit, die Benutzeroberfläche (usw.) zu erstellen, aber wenn Sie es selbst mit Actionscript machen möchten, hindert Sie nichts daran (dies wäre wahrscheinlich auch einfacher, wenn Sie diese Benutzeroberfläche bereits im AS2-Code haben).Flex (Builder) ist nur eine schnelle Möglichkeit, Dinge zu tun, die Sie vielleicht nicht selbst tun möchten, wie zum Beispiel die Benutzeroberfläche zu erstellen und Daten zu binden, aber im Wesentlichen erstellt es nur einen Teil der .swf-Datei für Sie – da ist keine Zauberei dabei ;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top