Qual é a melhor abordagem para mover um projeto pré-existente do Flash 7/AS2 para o Flex/AS3?

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

Pergunta

Eu tenho uma grande base de código direcionada ao Flash 7, com um muito das classes AS2.Espero poder usar o Flex para novos projetos, mas muitas coisas novas em nosso roteiro são adições ao código antigo.

A sintaxe para AS2 e AS3 é geralmente a mesma, então estou começando a me perguntar o quão difícil seria portar a base de código atual para Flex/AS3.Eu sei que todas as coisas relacionadas à UI seriam duvidosas (atualmente a UI é gerada em tempo de execução com muitas coisas createEmptyMovieClip() e attachmentMovie()), mas as coisas da UI e do controlador/modelo são em sua maioria separadas.

Alguém já tentou portar uma grande base de código AS2 para AS3?Quão difícil é isso?Que tipos de armadilhas você encontrou?Alguma recomendação de abordagens para realizar esse tipo de projeto?

Foi útil?

Solução

Alguns problemas notáveis ​​que vi ao tentar converter um grande número de classes AS2 para AS3:

Nomenclatura de pacotes

class your.package.YourClass
{
}

torna-se

package your.package
{
    class YourClass
    {
    }
}

As importações são obrigatórias

Você deve importar explicitamente quaisquer classes externas usadas - referir-se a elas pelo nome completo não é mais suficiente.

Os métodos de interface não podem ser rotulados como 'públicos'

Isso faz todo o sentido, mas o AS2 permitirá que você faça isso, portanto, se houver algum, ele precisará ser removido.

Palavra-chave 'substituição' explícita

Quaisquer funções que substituam uma função de classe pai devem ser declaradas com o sobrepor palavra-chave, bem como C#.Na mesma linha, se você tiver interfaces que estendem outras interfaces e redeclaram funções, essas substituições deverão ser removidas (novamente, como acontece com público, essa notação não fazia sentido de qualquer maneira, mas o AS2 permitiu que você fizesse isso).

Todo o material interno do Flash mudou

Você aludiu a isso acima, mas é agora flash.display.MovieClip em vez de apenas Clipe de filme, por exemplo.Há muitos detalhes nesta categoria e não fui longe o suficiente para encontrar todos eles, mas haverá muito aborrecimento aqui.

Conclusão

Não consegui trabalhar nessa conversão até o ponto de sucesso, mas consegui, em questão de horas, escrever uma ferramenta rápida em C# que tratasse de todos os aspectos, exceto o sobrepor palavra-chave.Automatizar as importações pode ser complicado - no meu caso, todos os pacotes que usamos começam com alguns pacotes de nível raiz, para que sejam fáceis de detectar.

Outras dicas

Primeiro, espero que você não esteja usando eval() em seus projetos, já que não há equivalente no AS3.

Uma das coisas que eu faria seria passar Guia de migração da Adobe (que é basicamente apenas uma lista detalhada do que mudou) item por item e tente descobrir se cada item pode ser alterado através de uma simples operação de pesquisa e substituição (possivelmente usando um regex) ou se é mais fácil editar manualmente as ocorrências para corresponder a AS3.Provavelmente, em muitos casos (especialmente se, como você disse, a quantidade de código a ser migrado for bastante alta), será melhor criar scripts para as alterações (ou seja,usando pesquisa e substituição de regex) e corrigindo manualmente quaisquer casos fronteiriços em que as alterações automatizadas falharam.

Esteja preparado para reservar algum tempo para depurar um pouco e também executar alguns casos de teste.

Além disso, como outros já mencionaram, tentar combinar SWFs AS2 com SWFs AS3 não é uma boa ideia e nem funciona, então você definitivamente terá que migrar todo o código em um projeto de uma só vez.

Aqui estão algumas referências adicionais para passar de AS2 para AS3:

Apresentação de slides do Workshop AS3 introdutório de Grant Skinnershttp://gskinner.com/talks/as3workshop/

Lee Brimelow:6 razões para aprender ActionScript 3http://www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html

Colin Moock:ActionScript 3 essencial (considerado a "bíblia" para desenvolvedores de ActionScript):http://www.amazon.com/Essential-ActionScript-3-0/dp/0596526946

câmaras de microfone

mesh@adobe.com

Minha experiência tem sido que a melhor maneira de migrar para AS3 é em duas fases – primeiro estruturalmente e segundo sintaticamente.

Primeiro, faça rodadas de refatoração onde você permanece no AS2, mas chegue o mais próximo possível da arquitetura AS3.Naturalmente, isso inclui mover todos os seus scripts de quadro e scripts #include para pacotes e classes, mas você pode fazer coisas mais sutis, como alterar todos os seus ouvintes e despachantes de eventos para seguir o fluxo AS3 (usando propriedades de classe estática para tipos de eventos e registrando-se por método e não por objeto).Você também vai querer se livrar de todos os seus eventos "integrados" (como onEnterFrame) e dar uma olhada mais de perto na interação não trivial do mouse (como arrastar) e na interação do teclado (como detectar se uma tecla é pressionada).Esta fase pode ser feita de forma incremental.

A segunda fase é converter de AS2 para AS3 - alterando "_x" para "x", e todas as APIs, e assim por diante.Isso não pode ser feito de forma incremental, você precisa apenas fazer o máximo que puder de uma só vez e começar a corrigir todos os erros de compilação.Por esse motivo, quanto mais você fizer na primeira fase, mais dor você evitará na segunda fase.

Esse processo funcionou para mim em um projeto razoavelmente grande, mas devo observar que a primeira fase requer um conhecimento sólido de como o AS3 está estruturado.Se você é novo no AS3, provavelmente precisará tentar construir algumas das funcionalidades que precisará migrar.Por exemplo, se o seu código legado usa destinos de arrastar e soltar, você vai querer tentar implementar isso no AS3 para entender como seu código terá que mudar estruturalmente.Se você refatorar seu AS2 com isso em mente, as alterações finais de sintaxe deverão ocorrer sem problemas.

As maiores armadilhas para mim foram as partes que envolviam muita anexação, duplicação e movimentação de MovieClips, alteração de profundidade e assim por diante.Todas essas coisas não podem ser reprojetadas para se parecerem com AS3;você precisa apenas misturar tudo com a nova maneira de pensar e então começar a consertar os bugs.

Uma observação final: eu realmente não me preocuparia com coisas como instruções de importação e substituição, pelo menos não a ponto de automatizá-las.Se você perder algum, ele será capturado pelo compilador.Mas se você perder problemas estruturais, sentirá muito mais dor.

Migrar um projeto maior como este do as2 será mais do que uma simples busca e substituição.A nova sintaxe é bastante semelhante e simples de adaptar (como lilserf mencionou), mas, pelo menos, o fato de as3 ser mais rigoroso e o novo modelo de evento provavelmente causará muitos problemas.Provavelmente será melhor reescrever quase tudo do zero, possivelmente usando o código antigo como guia.

Migrar de as2 -> as3 em termos de conhecimento é bastante simples.Se você conhece as2 orientado a objetos, passar para as3 não será um problema.

Você ainda não precisa usar mxml para sua UI, a menos que queira especificamente.Mxml apenas fornece uma maneira rápida de construir a UI (etc), mas se você quiser fazer isso sozinho com actionscript, nada o impedirá (isso provavelmente também seria mais fácil se você já tivesse essa UI no código as2).Flex (Builder) é apenas uma maneira rápida de fazer coisas que você pode não querer fazer sozinho, como construir a interface do usuário e vincular dados, mas essencialmente é apenas criar uma parte do .swf para você - não há mágica nisso;)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top