actionscript-3 air flash-cs5.5 document-class

actionscript 3 - Clase AS3 personalizada no actualizada



actionscript-3 air (2)

Este es el viejo problema de lo que finalmente se reduce a Verify Error. Sucede cuando incorpora "Clase A" en una o más aplicaciones, módulos, swfs, etc. En definitiva, cada swf de salida que usa "Clase A" debe recompilarse cuando se cambia "Clase A". De lo contrario, terminas con una situación en la que 1 módulo tiene la implementación más nueva, pero otros no. Este problema se ve agravado por el hecho de que el dominio de la aplicación se define como un "primero en ganar" cuando encuentra una Clase del mismo nombre / paquete, lo que significa que si primero se hace referencia a la anterior, se ignorará la más reciente cargada.

La solución más permanente es usar la promoción de clase a una RSL que finalmente permite que la RSL controle la referencia real de "Clase A" en la que también implementa una interfaz "IClassAImpl" que utilizan todos los módulos. Esto permite al compilador vincular la referencia con una firma que conoce sin incorporar realmente la clase misma.

He tenido un problema similar a esto, pero los medios que resolví el último no están funcionando aquí.

Tengo una clase personalizada que consta de 12 módulos .as por separado. Están declarados en la clase de documento de la siguiente manera:

import trailcrest.v1.s3.averta; import trailcrest.v1.s3.chronos; import trailcrest.v1.s3.eripio; import trailcrest.v1.s3.fabrilla; import trailcrest.v1.s3.gradua; import trailcrest.v1.s3.lingua; import trailcrest.v1.s3.navigare; import trailcrest.v1.s3.pedem; import trailcrest.v1.s3.praeferre; import trailcrest.v1.s3.scriba; import trailcrest.v1.s3.securos; import trailcrest.v1.s3.sonus; public static var Averta:averta = new averta(); public static var Chronos:chronos = new chronos(); public static var Eripio:eripio = new eripio(); public static var Fabrilla:fabrilla = new fabrilla(); public static var Gradua:gradua = new gradua(); public static var Lingua:lingua = new lingua(); public static var Navigare:navigare = new navigare(); public static var Pedem:pedem = new pedem(); public static var Praeferre:praeferre = new praeferre(); public static var Scriba:scriba = new scriba(); public static var Securos:securos = new securos(); public static var Sonus:sonus = new sonus();

Esta es una nueva versión del código. Puedo referirme con éxito a todas estas clases y a las variables y funciones públicas dentro de la clase de documento "osr.as". También puedo VER un módulo de otro (es decir, Sonus puede ver a Scriba usando "osr.Scriba").

Donde estoy teniendo problemas es que, mientras los diversos módulos solían ser capaces de acceder a todas las funciones y variables públicas de los demás, una vez que agregué algunos módulos y variables nuevos y eliminé algunos antiguos, Flash Professional sigue UTILIZANDO literalmente el versión antigua. Dentro de cualquier módulo, las sugerencias de código muestran todas las funciones y variables públicas antiguas, y ninguna de las nuevas.

Supongo que esto tiene algo que ver con algún tipo de archivo temporal al que no puedo acceder. ¡Necesito que esto funcione esta semana!

My .fla es "Tester.fla" y la clase de documento es "osr.as." Ambos están en el mismo directorio. También en el mismo directorio está la estructura de carpetas "/ trailcrest / v1 / s3 /" que contiene todos los módulos de Trailcrest.

¿¿Ayuda??

EDITAR: Cada vez que trato de hacer referencia a una clase de Trailcrest de otra clase de Trailcrest (es decir, osr.Sonus.foo ), obtengo ...

TypeError: Error # 1009: no se puede acceder a una propiedad o método de una referencia de objeto nulo.

He confirmado sin lugar a dudas todas las referencias.


Bueno, finalmente lo descubrí. Aquí está lo delicado sobre lo que estaba pasando:

# 1: Flash aparentemente estaba tirando de una versión anterior de los módulos de Trailcrest. Para remediar esto, hice una copia de seguridad de todo y luego eliminé todas las instancias antiguas de Trailcrest de toda mi computadora. Luego, devolví solo los nuevos módulos. Eso solucionó el problema con las sugerencias de código que muestran los módulos y variables anteriores.

# 2: He tenido el Error # 1009 cada vez que una clase de Trailcrest intentaba acceder a cualquier componente de otra clase de Trailcrest, a pesar de que todas las referencias eran correctas.

La causa fue que estaba llamando funciones en los diversos módulos directamente desde la clase de documento osr.as, fuera de una función. Esto, por supuesto, se ejecuta en el inicio del programa.

Sin embargo, todo el código dentro de una clase Trailcrest que llamó a otra clase Trailcrest (es decir, osr.Sonus.foo ) no podría acceder a "foo" porque osr.as por alguna razón u otra no había terminado de inicializar las clases antes de que se ejecutara el código que los llamó. Esto ocurrió, a pesar de que el código del problema estaba muy por debajo del código que inicializó las clases (ver mi pregunta).

Para solucionar esto, simplemente tuve que ajustar el código del problema en una función estática pública en la clase de documento, y luego llamarlo desde la línea de tiempo. Eso aseguró que todas las clases se inicializaran antes de intentar hacer referencia entre ellas.

Huelga decir que todo funciona como una máquina bien engrasada ahora. Que raro.

Agradecería cualquier explicación sobre POR QUÉ esto solucionó el problema.