Quelle est la meilleure approche pour déplacer un projet préexistant de Flash 7/AS2 vers Flex/AS3 ?

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

Question

J'ai une grande base de code ciblant Flash 7, avec un parcelle des classes AS2.J'espère pouvoir utiliser Flex pour tout nouveau projet, mais beaucoup de nouveautés dans notre feuille de route sont des ajouts à l'ancien code.

La syntaxe pour AS2 et AS3 est généralement la même, donc je commence à me demander à quel point il serait difficile de porter la base de code actuelle vers Flex/AS3.Je sais que tous les éléments liés à l'interface utilisateur seraient incertains (actuellement, l'interface utilisateur est générée au moment de l'exécution avec beaucoup de éléments createEmptyMovieClip() et attachMovie()), mais l'interface utilisateur et les éléments de contrôleur/modèle sont pour la plupart séparés.

Quelqu'un a-t-il essayé de porter une grande base de code AS2 vers AS3 ?Est-ce difficile ?Quels types d’embûches avez-vous rencontré ?Des recommandations sur les approches pour réaliser ce type de projet ?

Était-ce utile?

La solution

Quelques problèmes notables que j'ai constatés lors de la tentative de conversion d'un grand nombre de classes AS2 en AS3 :

Nom du paquet

class your.package.YourClass
{
}

devient

package your.package
{
    class YourClass
    {
    }
}

Les importations sont obligatoires

Vous devez importer explicitement toutes les classes externes utilisées – y faire référence par leur nom complet ne suffit plus.

Les méthodes d'interface ne peuvent pas être étiquetées « publiques »

Cela est tout à fait logique, mais AS2 vous permettra de le faire, donc si vous en avez, ils devront être supprimés.

Mot-clé explicite « remplacer »

Toutes les fonctions qui remplacent une fonction de classe parent doivent être déclarées avec le passer outre mot-clé, un peu comme C#.Dans le même ordre d'idées, si vous disposez d'interfaces qui étendent d'autres interfaces et redéclarent des fonctions, ces remplacements doivent être supprimés (encore une fois, comme avec publique, cette notation n'avait de toute façon aucun sens mais AS2 vous laissait faire).

Tous les éléments intégrés à Flash ont changé

Vous y avez fait allusion ci-dessus, mais c'est maintenant flash.display.MovieClip au lieu de juste FilmClip, Par exemple.Il y a beaucoup de détails dans cette catégorie, et je ne suis pas allé assez loin pour tous les trouver, mais il va y avoir beaucoup de désagréments ici.

Conclusion

Je n'ai pas réussi à travailler sur cette conversion, mais j'ai pu, en quelques heures, écrire un outil C# rapide qui gérait tous les aspects de cela, à l'exception du passer outre mot-clé.L'automatisation des importations peut être délicate : dans mon cas, les packages que nous utilisons commencent tous par quelques packages au niveau racine, ils sont donc faciles à détecter.

Autres conseils

Tout d'abord, j'espère que vous n'utilisez pas eval() dans vos projets, puisqu'il n'y a pas d'équivalent en AS3.

Une des choses que je ferais serait de passer par Guide de migration d'Adobe (qui est essentiellement juste une liste détaillée de ce qui a changé) élément par élément et essayez de déterminer si chaque élément peut être modifié via une simple opération de recherche et de remplacement (éventuellement en utilisant une expression régulière) ou s'il est plus facile de simplement modifier manuellement les occurrences. pour correspondre à AS3.Probablement dans de nombreux cas (surtout si, comme vous l'avez dit, la quantité de code à migrer est assez élevée), vous feriez mieux de scripter les modifications (c'est-à-direen utilisant la recherche et le remplacement d'expressions régulières) et en corrigeant manuellement tous les cas limites où les modifications automatisées ont échoué.

Soyez prêt à réserver du temps pour un peu de débogage et également pour exécuter certains cas de test.

De plus, comme d'autres l'ont déjà mentionné, essayer de combiner des SWF AS2 avec des SWF AS3 n'est pas une bonne idée et ne fonctionne même pas vraiment, vous devrez donc certainement migrer tout le code d'un projet à la fois.

Voici quelques références supplémentaires pour passer d’AS2 à AS3 :

Présentation de l'atelier d'introduction à l'AS3 de Grant Skinnershttp://gskinner.com/talks/as3workshop/

Lee Brimelow :6 raisons d'apprendre ActionScript 3http://www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html

Colin Moock :Essential ActionScript 3 (considéré comme la « bible » pour les développeurs ActionScript) :http://www.amazon.com/Essential-ActionScript-3-0/dp/0596526946

chambres de micro

mesh@adobe.com

D'après mon expérience, la meilleure façon de migrer vers AS3 se déroule en deux phases : la première structurellement et la seconde syntaxiquement.

Tout d’abord, effectuez des séries de refactorisation en restant dans AS2, mais en vous rapprochant le plus possible de l’architecture AS3.Naturellement, cela inclut le déplacement de tous vos scripts frame et #include dans des packages et des classes, mais vous pouvez faire des choses plus subtiles comme modifier tous vos écouteurs et répartiteurs d'événements pour suivre le flux AS3 (en utilisant les propriétés de classe statiques pour les types d'événements et en vous enregistrant par méthode). plutôt que par objet).Vous souhaiterez également vous débarrasser de tous vos événements « intégrés » (tels que onEnterFrame), et vous souhaiterez examiner de près les interactions non triviales de la souris (telles que le glissement) et les interactions du clavier (telles que la détection si une touche est enfoncée).Cette phase peut être réalisée de manière incrémentale.

La deuxième phase consiste à convertir AS2 en AS3 - en changeant "_x" en "x", ainsi que toutes les API, et ainsi de suite.Cela ne peut pas être fait de manière incrémentielle, vous devez simplement faire tout ce que vous pouvez d'un seul coup, puis commencer à corriger toutes les erreurs de compilation.Pour cette raison, plus vous pouvez en faire dans la première phase, plus vous évitez la douleur dans la deuxième phase.

Ce processus a fonctionné pour moi sur un projet assez important, mais je dois noter que la première phase nécessite une solide compréhension de la façon dont AS3 est structuré.Si vous êtes nouveau sur AS3, vous devrez probablement essayer de créer certaines des fonctionnalités dont vous aurez besoin pour le portage.Par exemple, si votre code existant utilise des cibles de glisser-déposer, vous souhaiterez essayer de l'implémenter dans AS3 pour comprendre comment votre code devra changer structurellement.Si vous refactorisez ensuite votre AS2 en gardant cela à l'esprit, les modifications finales de la syntaxe devraient se dérouler sans problème.

Les plus gros pièges pour moi étaient les parties qui impliquaient beaucoup de fixation, de duplication et de déplacement de MovieClips, de modification de leur profondeur, etc.Tout cela ne peut pas vraiment être réorganisé pour ressembler à AS3 ;vous devez simplement intégrer tout cela dans la nouvelle façon de penser, puis commencer à corriger les bugs.

Une dernière remarque : je ne m'inquiéterais vraiment pas de choses comme les instructions d'importation et de remplacement, du moins pas au point de les automatiser.Si vous en manquez, il sera récupéré par le compilateur.Mais si vous négligez les problèmes structurels, vous ressentirez bien plus de souffrance.

La migration d'un projet plus important comme celui-ci depuis as2 sera plus qu'une simple recherche et remplacement.La nouvelle syntaxe est assez similaire et simple à adapter (comme lilserf l'a mentionné), mais au moins le fait que as3 soit plus strict et le nouveau modèle d'événement causera probablement beaucoup de problèmes.Vous feriez probablement mieux de réécrire plus ou moins presque tout à partir de zéro, en utilisant éventuellement l'ancien code comme guide.

La migration de as2 -> as3 en termes de connaissances est cependant assez simple.Si vous connaissez l'as2 orienté objet, passer à as3 ne sera pas du tout un problème.

Vous n'êtes toujours pas obligé d'utiliser mxml pour votre interface utilisateur, sauf si vous le souhaitez spécifiquement.Mxml fournit simplement un moyen rapide de créer l'interface utilisateur (etc), mais si vous souhaitez le faire vous-même avec ActionScript, rien ne vous empêche (cela serait probablement aussi plus facile si vous avez déjà cette interface utilisateur dans le code as2).Flex (Builder) n'est qu'un moyen rapide de faire des choses que vous ne voulez peut-être pas faire vous-même, comme créer l'interface utilisateur et lier des données, mais il s'agit essentiellement de créer une partie du .swf pour vous - il n'y a pas de magie ;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top