quarta-feira, 29 de abril de 2009

ComboBox

Olá, todos sabemos(eu espero que sim) que o FLash/AS3 já vem com varios componentes prontos para editar, uma deles é o "comboBox", mas ele possui algumas limitações, como por exemplo colocar imagens no lugar de texto. Estou trabalhando num projeto e me deparei com uma dessas limitações, então resolvi fazer meu próprio ComboBox.
Os dados estão nesse XML, é bom dar uma olhada nele.


Escolha uma opção.

O código comentado:
//importando a casse Tweener.
import caurina.transitions.Tweener;

//criando os objetos XML
var xml1:XML;
var xmlList1:XMLList;
//carregando o XML
var xmlLoader1:URLLoader = new URLLoader();
xmlLoader1.load(new URLRequest("http://65.254.56.211/~soda/sodaflash/select/sel.xml"));
xmlLoader1.addEventListener(Event.COMPLETE, xmlLoaded1);

//ao carregar o XML entra nessa função
function xmlLoaded1(event:Event):void {
//preparando o XML
xml1=XML(event.target.data);
xmlList1=xml1.children();

//for para ler os nós do XML
for (var i:int = 0; i < style="color: rgb(153, 153, 153);">//criando o objeto Nome
Nome = new nome();
//adicionando ao comboBox
sel.aqui.addChild(Nome);
Nome.name=String(i); Nome.texto.text=xmlList1[i]; Nome.y=Nome.height*i; Nome.addEventListener(MouseEvent.MOUSE_OVER,overNome); Nome.addEventListener(MouseEvent.MOUSE_OUT,outNome); Nome.addEventListener(MouseEvent.CLICK,clickNome);
}
}
//criando o objeto Nome
var Nome:nome;

//variavel que pega o local Y do objeto clicado
var seguraY:int=0;
//mascara do comboBox
sel.aqui.mask=sel.mascara;

//função para quando o mouse passa em cima do objeto do combobox
function overNome(e:Event) {
sel.aqui.y=0;
//tween para abrir o comboBox
Tweener.addTween(sel.fundo,height:sel.aqui.height,time:1}); Tweener.addTween(sel.mascara,height:sel.aqui.height,time:1});
//um jeito rapido de mudar a cor do objeto do comboBox
e.target.parent.bg.alpha=.8;
}
//função para quando o mouse sai de cima do objeto do combobox
function outNome(e:Event) {
//a "cor"
e.target.parent.bg.alpha=0;
//o seguraY é usado para voltar para o ultimo objeto clicado
sel.aqui.y=seguraY;
//tween para fechar o comboBox
Tweener.addTween(sel.fundo,{height:Nome.height,time:1}); Tweener.addTween(sel.mascara,{height:Nome.height,time:1});
}
//função para quando clicar no objeto do comboBox
function clickNome(e:Event) {
//chama a função que exibe o resultado
mostraResultado(e.target.parent.name);
//adiciona um objeto para para não atrapalhar na animação
sel.addChild(square);
//faz com que esse objeto suma depois de 1seg.
meuTempo.start();
//guarda a posição do clicado
seguraY = -(e.target.parent.y);
Tweener.addTween(sel.aqui,{y:-(e.target.parent.y),time:1});
var t:int=e.target.parent.name;
}

//função de mostra o resultado como o próprio nome já diz.
function mostraResultado(s:String){
trace(s);
resultado.text = xmlList1[int(s)];
}


//o objeto mágico criado para ajudar...
var square:MovieClip = new MovieClip();
square.graphics.beginFill(0xFF);
square.graphics.drawRect(0,0, 200, 5000);
//troque esse parametro para 1, para descobrir a mágica
square.alpha=0;
square.graphics.endFill();

//função do timer, já falei sobre isso no post passado.
var meuTempo:Timer=new Timer(1000); meuTempo.addEventListener("timer", FuncaoDoTimer);

function FuncaoDoTimer(e:TimerEvent) {
sel.removeChild(square);
meuTempo.stop();
trace("Timer chamado " + meuTempo.currentCount + " veses.");
}


Ufa, essa foi grande, por favor, qualquer dúvida comenta ai!.

Baixar fonte aqui

quarta-feira, 22 de abril de 2009

A Classe Timer AS3

Na versão anterior do ActionScript, havia dois jeitos diferentes para acionar eventos baseados em tempo.As funções setInterval() e a setTimeout() foram as duas funções mais usadas para chamar uma função após um determinado período de tempo. No ActionScript 3(AS3), temos agora uma classe no pacote flash.utils . Esta categoria inclui todas as funcionalidades que você precisa para aplicações baseadas em tempo. Para utilizar a classe, primeiro você deve importar o pacote flash.utils , uso no exemplo a seguir. O "Timer construtor" espera um argumento que representa o atraso desejado em milissegundos. Um segundo argumento opcional determina o número de vezes para chamar a função. O padrão para este valor é 0, o que significa que ele irá chamar a função infinitamente.



No exemplo abaixo estou criando um temporizador que irá disparar duas vezes por segundo. Na minha aplicação abaixo estou simplesmente fazendo um trace () para o "output panel" mostrando quantas vezes ela disparou. Para obter este valor estou lendo a propriedade Timer.currentCount .

Chega de papo e vamos direto ao AS3.

//precisamos importar o pacote flash.utils
import flash.utils.*;

//criando um objeto new Timer com delay de 500ms
var meuTempo:Timer = new Timer(500);
meuTempo.addEventListener("timer", FuncaoDoTimer);

// iniciando o Timer
meuTempo.start();

//funcao será chamada a cada 500ms
function FuncaoDoTimer(e:TimerEvent){
trace("Timer chamado " + meuTempo.currentCount + " veses.");
}

segunda-feira, 20 de abril de 2009

Menu com balão acompanhando o mouse

Passe o mouse nos quadrados. (link do fonte no final do post)

O balão cresce, mas não distorce, isso acontece por causa do "9-slice scaling" está habilitado, ele não aumenta as áreas marcadas com vermelho na imagem abaixo, uso apenas o scaleX no exemplo, mas se usasse o scaleY ele só iria crescer o que está em verde.


Para habilitar o "9-slice scaling", vá na propriedade do movieClip e marque a caixinha do "Enable guides for 9-slice scaling.


Código comentado
//importando a classe Tweener, ver mais em http://code.google.com/p/tweener/
import caurina.transitions.Tweener;


//adicionando o elemento balao, da library
var Balao:balao;
Balao = new balao;
//adicionando o balao ao palco
addChild(Balao);
//alpha = 0 =]
Balao.alpha = 0;

//ativando a famosa maozinha do botao
preto.buttonMode = true;
vermelho.buttonMode = true;

//criando um listener para escutar o movimento do mouse
addEventListener(MouseEvent.MOUSE_MOVE,mouseMover);

//funcao que é chamada sempre que o mouse se move
function mouseMover(e:Event):void{
//o movieclip balao segue o mouse de perto =]
Balao.x = mouseX;
Balao.y = mouseY;
}

//criando os listener dos botoes
preto.addEventListener(MouseEvent.MOUSE_OVER,pretoOver);
vermelho.addEventListener(MouseEvent.MOUSE_OVER,vermelhoOver);
preto.addEventListener(MouseEvent.MOUSE_OUT,pretoOut);
vermelho.addEventListener(MouseEvent.MOUSE_OUT,vermelhoOut);


function pretoOver(e:Event){
Tweener.addTween(Balao,{alpha:1,time:1});
//diminuindo o tamanho do balao para 80%
Tweener.addTween(Balao.bg,{scaleX:.8,time:1});
//adicionando o texto ao balao
Balao.texto.text = "PRETO";
}
function vermelhoOver(e:Event){
Tweener.addTween(Balao,{alpha:1,time:1});
//aumentando o tamanho do balao para 170%
Tweener.addTween(Balao.bg,{scaleX:1.7,time:1});
Balao.texto.text = "VERMELHO FERRARI";
}

//quando o mouse sair de cima de um botao o balao some
function pretoOut(e:Event){
Tweener.addTween(Balao,{alpha:0,time:1});
}
function vermelhoOut(e:Event){
Tweener.addTween(Balao,{alpha:0,time:1});
}


Baixar Fonte - clique aqui

quinta-feira, 16 de abril de 2009

Segundo vídeo feito em After Effects



É uma exibição de clientes, pra um segundo trabalho ficou legal.

Depois vou colocar uns tutoriais de After Effects aqui.

quarta-feira, 15 de abril de 2009

Como saber o sistema operacional do cliente. AS3

O exemplo abaixo

O código.
import flash.system.Capabilities;

CapabilitiesExample();
function CapabilitiesExample() {
showCapabilities();
}

function showCapabilities():void {
sis.text="Seu OS é: "+Capabilities.os;
}


Para baixar o fonte: clique aqui

quarta-feira, 8 de abril de 2009

Button AS3

Para criar vários botões que usam uma só função com AS3 é mais fácil do que parece.

Sempre me perguntam sobre isso, até agora o jeito mais saudavel que encontrei de fazer está no código as3 a baixo, qualquer dúvida estou a disposição.

Se fosse um menu em flash + as3, poderíamos criar um array para facilitar as coisas e pegar o "índice" do objeto que chama a função, assim nem precisamos passar algum parametro para o objeto(seria um post interessante?).




//adicionando propriedades ao objeto
caixaAzul.teste= "1";
caixaVermelha.teste= "2";
//adicionando os listeners
caixaAzul.addEventListener(MouseEvent.CLICK, mudaCor);
caixaVermelha.addEventListener(MouseEvent.CLICK, mudaCor);

function mudaCor( e:Event ):void
{
trace(e.target.teste);
}

Imprimir página no Flash , as3

Cá estava eu fazendo um trabalho, uma calculadora/orçamento para uma empresa de fora, até ai tudo bem, no final dos cálculos precisava imprimir os resultados na impressora do cliente.

Existe uma classe para isso, PrintJob, muito fácil de usar, até imprimi a primeira pagina(imagem).
O único problema foi na hora de mostrar pro cliente que usa Mac, e descobri que a classe PrintJob não funciona bem no Mac OS, os desenvolvedores da Adobe já estão tentando corrigir, https://bugs.adobe.com/jira/browse/FP-307

Para ver a calculadora, http://65.254.56.211/~soda/pixily/

Agora é só esperar.