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 XML e XMLNode sã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 pacote flash. Você precisa então usar flash.MovieClip em vez de MovieClip, ou adicionar uma declaração import flash.MovieClip; no início de sua classe.
  • usar flash.Lib._root em vez de _root, flash.Lib._global ao invés de _global e flash.Lib.current para acessar o local root (diferente do _root có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.

version #6122, modified 2009-06-01 10:05:44 by millermedeiros