Começando com Haxe / Flash
Desenvolver aplicações de Flash é realmente simples em Haxe. Veremos primeiramente o exemplo HelloWorld :
HelloWorld
Este é um exemplo muito simples mostrando mais da ferramenta.
Test.hx
Definir / criar esta classe em um arquivo chamado Test.hx
class Test { static function main() { trace("Hello World !"); } }
compile.hxml
Crie o arquivo compile.hxml no mesmo diretório com o seguinte conteúdo.
-swf test.swf -main Test
test.swf
Para compilar, você pode simplesmente dar um duplo clique sobre o arquivo compile.hxml ou executar o comando haxe compile.hxml. Se ocorrer algum erro, ele será exibido.
Se você receber o erro "Standard library not found" ou "Class not found : Test", certifique-se que Haxe pode encontrar tanto a biblioteca arquivos distribuídos com Haxe (o conteúdo do diretório std) e o próprio Test.hx. Por padrão, Haxe olha no diretório atual, apenas o que significa que tanto Test.hx e os conteúdos do diretório std precisa estar no diretório de onde Haxe é invocado. Você pode substituir o caminho de pesquisa através da variável de ambiente HAXE_LIBRARY_PATH, por exemplo, /home/mjs/local/lib/haxe/std:. (nota final do cólon e do período).
Se você receber o erro "Invalid class name -swf test.swf" mude o encoding do seu arquivo .hxml para ANSI.
test.html
Se tudo correr sem problemas como devia, isto irá produzir um arquivo chamado test.swf. Agora, criar uma página HTML como esta abaixo chamada test.html:
<html> <head><title>Haxe Flash</title></head> <body bgcolor="#dddddd"> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" id="haxe" align="middle"> <param name="movie" value="test.swf"/> <param name="allowScriptAccess" value="always" /> <param name="quality" value="high" /> <param name="scale" value="noscale" /> <param name="salign" value="lt" /> <param name="bgcolor" value="#ffffff"/> <embed src="test.swf" bgcolor="#ffffff" width="400" height="300" name="haxe" quality="high" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> </body> </html>
Se você abrir o arquivo test.html com o seu browser, ele deve exibir Hello World com informações sobre o arquivo e a linha que o trace ocorreu.
Desenhar um Quadrado
Até agora, fomos apenas utilizando Haxe pura, não-específica a API do Flash. A função trace é implementada por predefinição para impressão na tela. Vamos ver agora como desenhar um quadrado na tela. Para isso, é preciso obter um objeto para desenho, que é chamado de MovieClip no Flash. Modifique o seu arquivo Test.hx com o seguinte conteúdo:
class Test { static function main() { var mc : flash.MovieClip = flash.Lib.current; mc.beginFill(0xFF0000); mc.moveTo(50,50); mc.lineTo(100,50); mc.lineTo(100,100); mc.lineTo(50,100); mc.endFill(); } }
O que este código faz é pegar o actual MovieClip e usando a API do Flash para exibir um desenho quadrado. Execute o arquivo compile.hxml para compilar novamente e abra o test.html para exibir um quadrado vermelho.
Usando a Biblioteca
No Flash, você armazenar activos (gráficos, sons, fontes ...) dentro da Biblioteca. Recursos podem ter um identificador chamado um linkage name. Quando você cria um arquivo SWF a partir de uma biblioteca usando a IDE Flash ou outras ferramentas open source, como o recomendado SwfMill, que irá conter os recursos que podem ser referenciados a partir de Haxe utilizando o seu linkage names.
Por exemplo, digamos que você tenha um SWF chamado resource.swf contendo um MovieClip com linkage name button. Modifique o código para que ele mostrer este recurso:
class Test { static function main() { var but = flash.Lib.current.attachMovie("button", "but001", 0); but._x = 10; but._y = 20; } }
Este exemplo deverá anexar um button a partir da biblioteca em depth 0 e com identifer but001 (devera haver apenas um único objeto por identificador e profundidade). Em seguida, coloque o botão na posição (10, 20) na tela.
Para exibir o botão, precisamos de dizer ao Haxe para procurar recursos no arquivo resource.swf. Edite o arquivo compile.hxml com o seguinte conteúdo:
-swf test.swf -swf-lib resource.swf -main Test
Agora você pode executar o arquivo compile.hxml para compilar o projecto. O test.swf criado desta forma vai incluir todo o conteúdo do resource.swf bem como o código Haxe compilado. Você pode testá-lo, abrindo o arquivo test.html.
Observe que o test.swf também usará os mesmos parâmetros (largura, altura, cor de fundo, versão do flash e quadros por segundo), conforme especificado no resource.swf, embora sem o recurso, usando os parâmetros padrões do haxe. No entanto, a maioria destes parâmetros (excepto os frames por segundo e versão do flash) pode ser sobre-escrito no código-fonte HTML como você pode ver no interior do arquivo test.html.
Alterando propriedades do SWF
As propriedades do SWF podem ser mudadas usando o comando -swf-header. Edite seu HXML e acrescentar o seguinte:
-swf test.swf -main Test -swf-header 200:300:40:FF0000
SWF irá definir o tamanho para 200x300 pixels a 40 FPS com uma cor vermelha de fundo. Observe que o tamanho e o fundo são redefinidos no HTML propriedades.
Você também pode optar uma específica versão do Flash Player, usando o comando -swf-version. Haxe processará em conformidade:
- version 6 : irá gerar bytecode para Adobe Flash Player 6.0 (mais lento, uma vez que não utilizam registos). A API flash não é deficiente com esta versão de modo que tenhamos o cuidado de só utilizar a API classes / métodos disponíveis para esta versão do player.
- version 7 : irá gerar bytecode para o Flash Player 7, enquanto que desativando Flash 8 API
- version 8 : irá gerar bytecode para FP8 (mesmo que o FP7), mas permitir que a nova API do Flash 8
- version 9 : terá como alvo o Flash Player 9 e utilizar a API ActionScript3
Indo mais Longe
Agora que você pode fazer coisas tão fácil, tudo que você precisa para ir mais longe é aprender a API do Flash necessária para implementar a sua aplicação. Haxe é conservador perante a API da Adobe, aonde você pode ler mais em Livedocs, a fim de obter plena ajudar nisso (ver todas as classes referêntes a ActionScript).
Existem algumas pequenas diferenças entre API flash do Haxe e ActionScript 2 do Flash, que são listados aqui:
- o padrão classes como 'Date
,Array,String'' pode ter algumas alterações no Haxe, uma vez que são comuns a todos os Haxe plataformas. Veja a documentação Haxe API para mais detalhes.
- o
XMLeXMLNodesão classes fundidos em uma única classe Xml, e fornece e extende da API.
- todas as principais classes do Flash
MovieClip,TextField... estão no pacoteflash. Você precisa então usarflash.MovieClipem vez deMovieClip, ou adicionar uma declaraçãoimport flash.MovieClip;no início de sua classe.
- usar
flash.Lib._rootem vez de_root,flash.Lib._globalao invés de_globaleflash.Lib.currentpara acessar o local root (diferente do_rootcódigo em Haxe se for carregado no SWF).
Para além destas pequenas diferenças, você pode facilmente utilizar tudo existente no API do Flash se você já sabe disso.