¿Cuál es el mejor enfoque para mover un proyecto preexistente de Flash 7/AS2 a Flex/AS3?

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

Pregunta

Tengo una base de código grande dirigida a Flash 7, con un lote de clases AS2.Espero poder usar Flex para cualquier proyecto nuevo, pero muchas cosas nuevas en nuestra hoja de ruta son adiciones al código anterior.

La sintaxis para AS2 y AS3 es generalmente la misma, por lo que estoy empezando a preguntarme qué tan difícil sería trasladar el código base actual a Flex/AS3.Sé que todas las cosas relacionadas con la interfaz de usuario serían dudosas (actualmente, la interfaz de usuario se genera en tiempo de ejecución con muchas cosas de createEmptyMovieClip() y adjuntoMovie()), pero la interfaz de usuario y el controlador/modelo están en su mayoría separados.

¿Alguien ha intentado portar una base de código grande de código AS2 a AS3?¿Qué tan difícil es?¿Con qué tipo de obstáculos te topaste?¿Alguna recomendación sobre enfoques para realizar este tipo de proyecto?

¿Fue útil?

Solución

Algunos problemas notables que vi al intentar convertir una gran cantidad de clases AS2 a AS3:

Nomenclatura de paquetes

class your.package.YourClass
{
}

se convierte

package your.package
{
    class YourClass
    {
    }
}

Se requieren importaciones

Debe importar explícitamente cualquier clase externa utilizada; referirse a ellas por su nombre completo ya no es suficiente.

Los métodos de interfaz no se pueden etiquetar como "públicos"

Esto tiene mucho sentido, pero AS2 le permitirá hacerlo, por lo que si tiene alguno, deberá eliminarlo.

Palabra clave explícita de "anulación"

Cualquier función que anule una función de clase principal debe declararse con el anular palabra clave, muy similar a C#.En la misma línea, si tiene interfaces que extienden otras interfaces y redeclaran funciones, esas anulaciones deben eliminarse (nuevamente, como con público, esta notación no tenía sentido de todos modos, pero AS2 te permite hacerlo).

Todo el material incorporado de Flash cambió.

Usted aludió a esto arriba, pero ahora es flash.display.MovieClip en lugar de solo clip de película, Por ejemplo.Hay muchos detalles específicos en esta categoría y no llegué lo suficientemente lejos como para encontrarlos todos, pero habrá muchas molestias aquí.

Conclusión

No pude trabajar en esta conversión hasta el punto de tener éxito, pero en cuestión de horas pude escribir una herramienta rápida de C# que manejaba todos los aspectos de esto excepto el anular palabra clave.Automatizar las importaciones puede ser complicado; en mi caso, todos los paquetes que utilizamos comienzan con algunos paquetes de nivel raíz para que sean fáciles de detectar.

Otros consejos

En primer lugar, espero que no estés usando eval() en sus proyectos, ya que no existe un equivalente en AS3.

Una de las cosas que haría es pasar por Guía de migración de Adobe (que es básicamente solo una lista detallada de lo que ha cambiado) elemento por elemento e intente averiguar si cada elemento se puede cambiar mediante una simple operación de búsqueda y reemplazo (posiblemente usando una expresión regular) o si es más fácil simplemente editar manualmente las ocurrencias. para corresponder a AS3.Probablemente, en muchos casos (especialmente si, como dijiste, la cantidad de código que se va a migrar es bastante alta), será mejor que escribas los cambios en un script (es decir,usando búsqueda y reemplazo de expresiones regulares) y arreglando manualmente cualquier caso límite en el que los cambios automatizados hayan fallado.

Esté preparado para reservar algo de tiempo para depurar un poco y ejecutar también algunos casos de prueba.

Además, como ya han mencionado otros, intentar combinar archivos SWF de AS2 con archivos SWF de AS3 no es una buena idea y ni siquiera funciona, por lo que definitivamente tendrás que migrar todo el código de un proyecto a la vez.

Aquí hay algunas referencias adicionales para pasar de AS2 a AS3:

Presentación de diapositivas del taller introductorio de AS3 de Grant Skinnershttp://gskinner.com/talks/as3workshop/

Lee Brimelow:Seis razones para aprender ActionScript 3http://www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html

Colin Moock:Essential ActionScript 3 (considerado la "biblia" para los desarrolladores de ActionScript):http://www.amazon.com/Essential-ActionScript-3-0/dp/0596526946

cámaras de micrófono

malla@adobe.com

Mi experiencia ha sido que la mejor manera de migrar a AS3 es en dos fases: la primera estructuralmente y la segunda sintácticamente.

Primero, realice rondas de refactorización donde permanezca en AS2, pero acérquese lo más posible a la arquitectura AS3.Naturalmente, esto incluye mover todos sus scripts de marco y #include scripts a paquetes y clases, pero puede hacer cosas más sutiles como cambiar todos sus detectores y despachadores de eventos para que sigan el flujo AS3 (usando propiedades de clase estáticas para tipos de eventos y registrándose por método en lugar de por objeto).También querrás deshacerte de todos tus eventos "integrados" (como onEnterFrame) y observar de cerca la interacción no trivial del mouse (como arrastrar) y la interacción del teclado (como detectar si se presiona una tecla).Esta fase se puede realizar de forma incremental.

La segunda fase es convertir de AS2 a AS3, cambiando "_x" a "x", y todas las API, y así sucesivamente.Esto no se puede hacer de forma incremental, solo debe hacer todo lo que pueda de una sola vez y luego comenzar a corregir todos los errores de compilación.Por esta razón, cuanto más puedas hacer en la primera fase, más dolor evitarás en la segunda fase.

Este proceso me ha funcionado en un proyecto razonablemente grande, pero debo señalar que la primera fase requiere una comprensión sólida de cómo está estructurado AS3.Si es nuevo en AS3, probablemente necesitará intentar crear algunas de las funciones que necesitará trasladar.Por ejemplo, si su código heredado utiliza objetivos de arrastrar y soltar, querrá intentar implementarlo en AS3 para comprender cómo su código tendrá que cambiar estructuralmente.Si luego refactoriza su AS2 con eso en mente, los cambios de sintaxis finales deberían realizarse sin problemas.

Los mayores obstáculos para mí fueron las partes que implicaban mucho adjuntar, duplicar y mover MovieClips, cambiar sus profundidades, etc.Todo eso no se puede rediseñar para que parezca AS3;tienes que simplemente integrarlo todo en la nueva forma de pensar y luego comenzar a corregir los errores.

Una nota final: realmente no me preocuparía por cosas como importar y anular declaraciones, al menos no hasta el punto de automatizarlas.Si omite alguno, el compilador lo detectará.Pero si pasas por alto los problemas estructurales, sentirás mucho más dolor.

Migrar un proyecto más grande como este desde as2 será más que una simple búsqueda y reemplazo.La nueva sintaxis es bastante similar y fácil de adaptar (como mencionó lilserf), pero al menos el hecho de que as3 es más estricto y el nuevo modelo de eventos probablemente causará muchos problemas.Probablemente le irá mejor reescribiendo más o menos casi todo desde cero, posiblemente utilizando el código antiguo como guía.

Sin embargo, migrar de as2 -> as3 en términos de conocimiento es bastante simple.Si conoce as2 orientado a objetos, pasar a as3 no será un problema en absoluto.

Aún no es necesario que utilices mxml para tu interfaz de usuario a menos que lo desees específicamente.Mxml simplemente proporciona una forma rápida de crear la interfaz de usuario (etc.), pero si desea hacerlo usted mismo con ActionScript, no hay nada que lo detenga (esto probablemente también sería más fácil si ya tiene esa interfaz de usuario en código as2).Flex (Builder) es solo una forma rápida de hacer cosas que quizás no quieras hacer tú mismo, como crear la interfaz de usuario y vincular datos, pero esencialmente solo se trata de crear una parte del .swf para ti; no tiene nada de mágico;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top