versiones usos que programación programacion programa professional lenguaje historia codigo flex flash actionscript-3 porting

flex - que - usos de adobe flash



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

Tengo una gran base de código dirigida a Flash 7, con muchas clases de AS2. Espero que pueda usar Flex para cualquier proyecto nuevo, pero muchas cosas nuevas en nuestro mapa de ruta son adiciones al código anterior.

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

¿Alguien ha intentado trasladar una gran base de código de código AS2 a AS3? ¿Qué tan difícil es? ¿Qué tipo de trampas te encontraste? ¿Alguna recomendación de enfoques para hacer este tipo de proyecto?


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

Nombre del paquete

class your.package.YourClass { }

se convierte

package your.package { class YourClass { } }

Se requieren importaciones

Debe importar de forma explícita las clases externas utilizadas; hacer referencia a ellas por su nombre completo ya no es suficiente.

Los métodos de interfaz no pueden etiquetarse como ''públicos''

Esto tiene mucho sentido, pero AS2 te permitirá hacerlo, así que si tienes alguno, deberán ser eliminados.

Palabra clave ''anular'' explícita

Todas las funciones que anulan una función de clase principal deben declararse con la palabra clave override , al igual que C #. En la misma línea, si tiene interfaces que amplían otras interfaces y redeclaran funciones, esas invalidaciones deben eliminarse (de nuevo, como en el caso del público, esta notación no tiene sentido de todos modos, pero AS2 le permite hacerlo).

Todas las cosas incorporadas de Flash cambiaron

Aludiste a esto anteriormente, pero ahora es flash.display.MovieClip en lugar de solo MovieClip, por ejemplo. Hay muchos detalles en esta categoría, y no llegué lo suficientemente lejos como para encontrarlos a todos, pero aquí va a haber mucha molestia.

Conclusión

No llegué a trabajar en esta conversión hasta el punto del éxito, pero en cuestión de horas pude escribir una rápida herramienta de C # que manejaba todos los aspectos de esto excepto la palabra clave de anulación . La automatización de las importaciones puede ser complicada; en mi caso, los paquetes que utilizamos comienzan con unos pocos paquetes de nivel raíz, por lo que son fáciles de detectar.


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

Una de las cosas que haría sería revisar la guía de migración de Adobe (que básicamente es una lista detallada de lo que ha cambiado) elemento por elemento e intentar averiguar si cada elemento puede cambiarse mediante una simple operación de búsqueda y reemplazo (posiblemente utilizando una expresión regular) o si es más fácil editar las ocurrencias manualmente para que correspondan a AS3. Probablemente en muchos casos (especialmente si, como dijiste, la cantidad de código que se migrará es bastante alta), será mejor que scripting los cambios (es decir, utilizando la búsqueda y reemplazo de expresiones regulares) y arreglando manualmente los casos de borde donde el los cambios automatizados han fallado

Prepárese para dedicar un tiempo a la depuración y a la ejecución de algunos casos de prueba.

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


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 simple de adaptar (como mencionó lilserf), pero el hecho de que as3 sea más estricto y el nuevo modelo de eventos probablemente causará muchos problemas. Probablemente va a estar mejor si reescribe más o menos casi todo desde cero, posiblemente utilizando el código anterior como guía.

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

Aún no tiene que usar mxml para su UI a menos que lo desee específicamente. Mxml solo proporciona una forma rápida de compilar la UI (etc.), pero si quiere hacerlo usted mismo con actionscript no hay nada que lo detenga (esto también sería más fácil si ya tiene esa UI 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 los datos vinculantes, pero básicamente está creando una parte de .swf para ti, no tiene magia;



Mi experiencia ha sido que la mejor forma de migrar a AS3 es en dos fases: primero estructuralmente y, en segundo lugar, sintácticamente.

Primero, realice rondas de refactorización en las que permanezca en AS2, pero acérquese lo más posible a la arquitectura AS3. Naturalmente, esto incluye mover todos los scripts de marcos y #include scripts a paquetes y clases, pero puedes hacer cosas más sutiles como cambiar todos tus escuchas de eventos y despachadores para seguir el flujo AS3 (usando propiedades de clases estáticas para tipos de eventos y registrando por método en lugar de por objeto). También querrá deshacerse de todos sus eventos "incorporados" (como onEnterFrame), y querrá observar de cerca la interacción no trivial del mouse (como el arrastre) y la interacción del teclado (como detectar si se presiona una tecla). Esta fase se puede hacer 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 tienes que hacer todo lo que puedas 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, entonces probablemente deba intentar desarrollar algunas de las funciones que necesitará para la migración. Por ejemplo, si su código heredado usa arrastrar y soltar objetivos, querrá implementar eso en AS3 para comprender cómo tendrá que cambiar su código estructuralmente. Si luego refactoriza su AS2 con eso en mente, los cambios de sintaxis finales deberían realizarse sin problemas.

Los mayores escollos para mí fueron las partes que implicaron un montón de adjuntar, duplicar y mover MovieClips, cambiar sus profundidades, y así sucesivamente. Todo eso no puede ser reconstruido para parecerse a AS3; tienes que simplemente mezclar todo en la nueva forma de pensar y luego comenzar a arreglar los errores.

Una nota final: realmente no me preocuparía por cosas como las declaraciones de importación y anulación, al menos no hasta el punto de automatizarlo. Si pierde alguno, será capturado por el compilador. Pero si pierde problemas estructurales, tendrá mucho más dolor.