Usando Haxe con Flash9
Puedes utilizar el idioma Haxe para construir un documento Flash9 SWF. Para ello, basta con compilar usando swf-versión-9 y el Haxe generara un compilador de Flash Player 9 SWF compatible.
Ejemplo - "Test.hx":
class Test { static function main() { // creates a TextField var tf = new flash.text.TextField(); tf.text = "Hello World !"; // add it to the display list flash.Lib.current.addChild(tf); } }
Compila usando el siguiente archivo HXML - "compile.hxml":
-main Test -swf-version 9 -swf test.swf
Cuando compiles un proyecto de Flash9, deberas utilizar el nuevo ActionScript3/Flash9 API en lugar del antiguo ActionScript2/Flash8. Puedes encontrar una descripcion de esto en API de Haxe(Click en Flash9 para desplegar menú). Esta aplicacion API es la misma que la disponible en AS3 y contiene metodos adicionales aún sin documentar.
Este API esta documentado en Adobe livedocs
Aunque puede haber algunos errores , el generador de código Haxe Flash9. esta funcionando correctamente y en algunos casos genera código más rápido que el compilador Flex oficial. Pruebalo tu mismo y reporta cualquier cosa que encuentres a la lista de correo Haxe.
Pudes añadis informacion de depuracion a tu Flash9 swf compilando con -debug. Esto te permitira ver el nombre del archivo fuente y numero de linea cunado ocurra una excepción en tiempo de ejecución.
Usando la Libreria
Si usted tiene recursos gráficos que fueron creados por el IDE de Flash (MX 2004 o bien CS3) o SwfMill, puede utilizar desde su código Flash9 de la siguiente manera:
- Con Flash MX / SwfMill: usar un identificador (nombre del vínculo) de su recurso, como lo haría normalmente para un
attachMovie - Con Flash CS3: Utilizar un nombre de clase AS3 como lo haría normalmente para AS3
- Crear un link estatico a tu libreria en su salida mediante el uso de
-swf-lib
Adjuntar Por Nombre
Haxe creará automáticamente una clase Flash9 para aquellos MovieClips que tengan un vinculo, siempre y cuando no haya ninguna disponible. A continuación, puede utilizar directamente flash.Lib.attach ("myname"), esto creara una instancia de este movieclip. Por ejemplo:
class Test { static function main() { var s = flash.Lib.attach("Shape"); flash.Lib.current.addChild(s); } }
Esto supone que tienes un clip con un vinculo un nombre de clase "Shape".
En el caso que uno de tus gráficos sea un vínculo de identificacion pero sin clase definida, puedes tomar la excepción lanzada por flash.Lib.attach o con el depurador de Flash9.
Clase vinculante
Si, por otra parte lo que quieres es redefinir o extender el comportamiento de la MovieClip, entonces puedes simplemente definir una clase en Haxe con el mismo nombre:
// Test.hx class Shape extends flash.display.MovieClip { public function move() { x += 2; y += 2; } } class Test { static function main() { var s = new Shape(); flash.Lib.current.addChild(s); s.move(); } }
Compila utilizando el siguiente archivo HXML:
-main Test -swf-lib lib.swf -swf-version 9 -swf test.swf
Esto creará un SWF que, una vez abierto, muestre el gráfico llamado "Shape" y lo avance un poco. En el caso que uno de tus gráficos sea un vínculo de identificacion pero sin clase definida, el depurador de Flash9 debera mostrarte un error cuando este cargando.
Colocando una fuente
Si quieres incrustar algun tipo de letra, crea un archivo resource.xml como éste:
<?xml version="1.0" encoding="iso-8859-1" ?>
<movie version="9">
<background color="#555555"/>
<frame>
<library>
<font name="Symbols" import="font/dejavusans.ttf"
glyphs="★☆☓☠✓✔✕✖✗✘❤"/>
</library>
</frame>
</movie>
Usa swfmill simple resource.xml resource.swf para construir el archivo resource.swf con la fuente. Añade lo siguiente en algun lado
class Symbols extends flash.text.Font {}
Luego, utiliza -swf-lib resource.swf para vincular el archivo resource.swf al .swf final, y utiliza tu fuente usando el nombre Symbols. Asegurate de ajustar embedFonts = true.
Nota adicional:
Para glifos* puesdes utilizar letras, es decir: "abcdefghijklmnopqrstuvwxyz" pero como esto es xml algunos caracteres no se pueden escribir de esta manera, este es un metodo muy útil que le ayudará a codificar los caracteres, tal vez haya un metodo mas optimo, pero este funciona bien.
private function buildAscii( s_:String ):String { var ascii: String = ''; var i: Int = 0; while( i < s_.length ) { ascii += '&#' + s_.charCodeAt( i ) + ';'; i++; } return ascii; }
* Nota del traductor: [[http://es.wikipedia.org/wiki/Glifo|Glifo]]: Un glifo (del griego glýf?, γλ?φω, esculpir o tallar) es un signo grabado o, por extensión, pintado. Por ejemplo, los glifos de la escritura maya o de la egipcia, tradicionalmente más conocidos en este último caso como jeroglífico (del griego tallas sacras o sacerdotales).
Incompatibilidades
Algunas características específicas no podrán compilarse o ejecutarse sobre Flash9:
- Tener un bloque
try/catchdentro de una expresión, como en el ejemplo siguiente:
var x = try f() catch( e : Dynamic ) null; - Tener una clase como "implementacion" de otra clase (aceptada en Haxe pero no en Flash9).
*No hay equivalente para la clase Flash Error en haxe, puedes lanzar cualquier objeto, asi que no necesitas heredarlo del error. Es una buena practica en AS3 lanzar objetos que heredan la clase error pero no es obligatorio. - Hay algunos problemas con nullness de Int, Uint, Float y Bool (véase más adelante)
Todo lo demás debería funcionar perfectamente y proporcionan el mismo resultado en todas las plataformas soportadas.