flex flash actionscript-3 swc

flex - Forzar la vinculación en tiempo de compilación de todas las clases en un SWC



flash actionscript-3 (5)

Usando Flash CS4, estoy haciendo un juego que tiene una docena de sonidos y un par de pistas de música. Para reducir el tiempo de publicación / compilación, he movido los sonidos y la música a un SWC (externo), que se encuentra en una "Ruta de biblioteca" para el proyecto. Esto funciona, pero con una advertencia ...

Hasta antes de que externalizara los activos, había estado creando instancias dinámicas de los objetos Sound del sonido incrustado obteniendo sus clases con getDefinitionByName .

// something like... var soundSubClass:Class = Class(getDefinitionByName(soundClassName)); var mySound:Sound = new soundSubClass();

Pero ahora que están ubicados en un SWC externo, necesito tener referencias "concretas" a las clases para cargarlas así, de lo contrario no están incluidas en el getDefinitionByName SWF publicado, y hay un error de tiempo de ejecución cuando getDefinitionByName intenta para obtener una clase que no existe

Entonces, mi pregunta : en Flash Professional CS4, ¿hay alguna manera de forzar que se incluyan los activos de una biblioteca, independientemente de si están vinculados estáticamente?

FlashDevelop tiene una opción de compilación "SWC Include Libraries", que es exactamente lo que yo quiero, y es distinta de la opción "Librerías SWC". La descripción de la opción "Bibliotecas de inclusión de SWC" es "Vincula todas las clases dentro de un archivo SWC al archivo SWF de aplicación resultante, independientemente de si se utilizan o no".

(Además, para mí es importante que todos los activos estén contenidos dentro del SWF compilado. Vincular en tiempo de ejecución no es lo que busco).


Puede proporcionar la ruta de su archivo assets.swc, en Propiedades de ActionScript, y eso debería funcionar y cargar activos en tiempo de ejecución.


Lamentablemente, no lo creo. Espero que esto se solucione en CS5, pero no apostaría por eso ...

El estándar actual (agravante) es tener una clase de manifiesto en su SWC que haga referencia a todas las clases raíz en el resto de la biblioteca:

public class MyLibManifest { public static function manifest():void { var class1:Class = Class1; var class2:Class = Class2; // etc... } }

Entonces, en algún lugar de tu .fla principal ...

import com.mylibrary.MyLibManifest; ... var myLibrary:Class = MyLibManifest;


No hay forma de incorporar e incrustar todas las clases en un SWC de forma predeterminada en Flash CS4 / CS5, pero es posible que pueda hacer esto con:

FlashDevelop

Como ya sabe, las propiedades del proyecto de este programa tienen opciones de compilación que diferencian entre:

  • Bibliotecas SWC: "Vincula archivos SWC al archivo SWF resultante en la aplicación. El compilador solo enlaza en esas clases para el archivo SWC que se requieren".
  • Bibliotecas de inclusión SWC: "Vincula TODAS las clases dentro de un archivo SWC al archivo SWF de la aplicación resultante, independientemente de si se utilizan o no".

Esa segunda opción "Bibliotecas de inclusión de SWC" podría ser útil, porque si simplemente compila su FLA tal como está en un SWC, luego coloque ese SWC y su otro SWC en FlashDevelop como bibliotecas de inclusión de SWC, debería compilarlas / fusionarlas en una sola SWF que funcionará como quieras.

FlashDevelop también podría ayudarlo a crear una lista de Clases codificadas en un SWC, porque si enlaza en el SWC como una Biblioteca SWC, se mostrará en el explorador del proyecto y podrá ver una lista de todas las clases en el SWC. También puede hacer clic con el botón derecho en cada clase y elegir "Insertar en documento" e insertará el nombre completo de la clase. Si haces eso, entonces presiona el punto y coma Enter, tendrás tu primera referencia de clase. Mantenga el mouse sobre la lista de clase en la configuración del proyecto y repita esto para cada clase en la lista. Solo lleva unos minutos hacer esto para cientos de clases, lo que facilita la creación de dicha lista. Sería aún más rápido si la cosa te permitiera insertar más de uno a la vez, pero parece que no.

Su única otra opción, en la que dijo que no estaba interesado sin ningún motivo, es Runtime Shared Libraries (RSL). Realmente no es tan importante cargar el archivo por separado, pero solo si maneja adecuadamente el proceso de carga y cualquier error que pueda ocurrir. Agregará algo de complejidad a su proyecto, y puede requerir algo de reflexión adicional, pero lo consideraría seriamente como una opción. Consulte la sección "Herencia del dominio de la aplicación" en www.senocular.com/flash/tutorials/contentdomains/?page=2 para obtener más información.


en flexión, y cada vez que tenga acceso a las opciones del compilador, puede usar: -incluir YourClass para forzar la vinculación de la clase de swc, incluso si no se hace referencia desde el swf principal.

pero no sé si puedes cambiar las opciones del compilador desde flash cs4 ...


Probablemente me esté perdiendo algo, pero ¿no se trata de utilizar -include-libraries en lugar de la opción de ruta de biblioteca del compilador, esto es lo que dice el documento de adobe sobre la opción

Vincula todas las clases dentro de un archivo SWC al archivo SWF de aplicación resultante, independientemente de si se utilizan o no.

Contraste esta opción con la opción de ruta de biblioteca que incluye solo aquellas clases a las que se hace referencia en tiempo de compilación.

Documentación de Adobe

Soy nuevo en todo esto, así que sé amable cuando me disparas en llamas :)