Eventos AddEventListener e RemoveEventListener

Nessa vídeo aula tento demonstrar de forma simples como funciona o básico do sistema de eventos do actionscript 3, abordo apenas a adição e remoção de ouvintes de eventos (AddEventListener e RemoveEventListener), em um próximo vídeo falarei do disparo de eventos. Iremos colocar ação em um botão em actionscript 3.

Sempre que faço uma vídeo aula tento escrever um roteiro, mas dessa vez transcrevi a vídeo aula e vou colocar em modo texto também, para que preferir ler do que ver o vídeo.

TRANSCRIÇÃO

Entender o que é evento no actionscript 3 é muito importante, pois a maioria das classes que usamos responde utilizando os eventos.
Por exemplo, o click do mouse em um botão, o click é um evento que o botão sofre, o botão por sua vez avisa que foi clicado, o programa ouvindo esse grito reage de acordo com o que deve ser feito.
Existem diversos tipos de eventos, como finalização de um carregamento, mouse sobre um movieclip, redimensionamento da tela, etc…
Vou tentar explicar de uma forma simples, vamos imaginar um general e um soldado no campo de batalha, o soldado está na luta com um rádio enquanto o general está no comando no quartel, o soldado ficou incumbido de reportar para o general quando uma bomba explodir no campo de batalha.
Quando um bomba explode ele grita, explodiu uma bomba, o ato da bomba explodir é um evento, o soldado percebendo esse evento chama o general, agora se o general vai escutar esse chamado é outra coisa.
E no actionscript3 é igual, sempre que acontece um evento, ele é disparado, mas só é ouvido se esse evento for cadastrado para ser ouvido.
Voltando ao exemplo do soldado, ele está lá gritando quando as bombas explodem, ai o general vê que seu rádio está desligado, ele liga o rádio e diz, soldado agora estou te ouvindo.
Pronto agora sim, todos os eventos de explosão de bombas serão ouvidos pelo general, e quando o general escuta um grito do soldado ele ordena mais contra-atraques.
No actionscript3 quando é cadastrado um ouvinte de evento é preciso informar quem será ouvido, no nosso caso é o soldado, qual evento será ouvido, que é a explosão e qual função reagirá quando esse evento for ouvido, desempenhado pelo nosso general.
Vamos partir para o código, quando clicarmos no soldado ele vai dar o avisa da bomba que explodiu , primeiramente vamos criar a função que reagirá ao chamado.

import flash.events.Event;

function explodiuBomba(event:Event):void{
 mensagem.text = "explodiu uma bomba ";
}

Agora cadastramos o soldado para ser ouvido pelo general.

soldado1.addEventListener(MouseEvent.CLICK , bombaExplodiu);

Pronto , tem gente ouvindo, tem gente gritando e tem gente reagindo ao evento.
Tem eventos para tudo, abaixo tem alguns links para maior aprofundamento no assunto.
Vamos incrementar mais um pouco isso, imagina que temos 2 soldados no campo com essa mesma função de ouvir as explosões, podemos utilizar informações passadas pelo evento para saber qual foi o soldado que avisou, vamos também cadastrar o soldado2.

import flash.events.Event;
function explodiuBomba(event:Event):void{
 mensagem.text = "explodiu uma bomba - " + event.target.name;
}

soldado1.addEventListener(MouseEvent.CLICK , explodiuBomba);
soldado2.addEventListener(MouseEvent.CLICK , explodiuBomba);

Sempre que um evento acontece é passado um objeto com informações sobre o evento, como o nome de quem sofreu o evento, o tipo de evento e diversas outras informações.
Nesse caso nós pegamos o evento e extraímos o seu alvo, quem foi que sofreu o evento usando o target, e pegamos o seu nome com o name.
Em uma próxima vídeo aula vou falar como disparar um evento customizado, passando um objeto com as informações que quiser.
Mas beleza, você deve estar pensando e seu eu não quiser mais ouvir esse soldado gritando na minha orelha?
É fácil, basta parar de ouvi-lo.
Da mesma forma que cadastramos para ouvir nós podemos descadastrar.
Vamos fazer assim, clicando no general manda o soldado 2 ficar quieto.

function calarSoldado(event:Event):void{
 mensagem.text = "cala a boca soldado 2";
 soldado2.removeEventListener(MouseEvent.CLICK , explodiuBomba);
}
general.addEventListener(MouseEvent.CLICK , calarSoldado);

Pronto, agora não escutamos mais esse mala gritando e deixamos ele morrer no campo de batalha.
Bom era isso que eu queria falar, não deixe de dar uma olhada nos links que estão ai embaixo.
Até a próxima.

Download do .fla.

DOWNLOAD

Links úteis

Documentação da adobe em português sobre eventos – LINK

Share

Código comentado – Inversor de URL

Esses dias um amigo reclamou comigo de que tudo que vai baixar na internet estava com o URL invertido e com sites de celulares para liberar o link, me pediu ajuda para criar uma lógica que desinverta a URL.
Então fiz uma lógica básica que inverte uma string.
Basta colocar a URL que está invertida e clicar em inverter.



O código é simples:

import flash.events.Event;

var url:String;

function inverterFN(event:Event):void
{
	
	var saida:String = "";
	//pega o que foi digitado
	url = entradaTXT.text;
	//caso for um URL que inverte busca o sinal de = 
	//e pega apenas os parametros
	url = url.slice(url.indexOf("url=")+1 , url.length);
	//percorre do fim para o inicio a url e coloca na saida
	for (var i:int = url.length; i > 0; i--){
		//vai somando letra a letra
		saida += (url.slice(i-1,i));
	}
	//mostra a saída
	saidaTXT.text = saida;
	
}

function limparFN(event:Event):void{	
	entradaTXT.text = saidaTXT.text = "";
}

inverterBTN.addEventListener(MouseEvent.CLICK , inverterFN);
limparBTN.addEventListener(MouseEvent.CLICK , limparFN);

Abaixo tem o download do .fla.
DOWNLOAD

Share

Vídeo Aula 1 – Unity 3D – Ferramenta SNAP

Opaa , faz tempinho que não coloco nada aqui, estive ocupado com outras coisas, mas volto estreando no ramo das vídeo aulas, essa é minha primeira e falo sobre a ferramenta snap do Unity 3D 3.0, que facilita a vida e a produtividade na hora de posicionar os objetos na cena, espero que gostem!

Share

Novo site da Hipno

Esta é a segunda versão do site da HIPNO que faço, espero que gostem.

Clique na imagem.

Share

Kit para programar o Lego NXT com JAVA

Essa semana tomei um baile dos drivers de Bluetooth e USB para utilizar o lego, e decidi escrever esse post.

Instalei no meu notebook o Windows 7 64 bits e inventei de instalar tudo 64 bits também (eclipse , Java , drivers, etc…),  resumindo, nada funcionou em relação ao Lejos achar o NXT, tanto via USB ou Bluetooth.

Depois de algumas horas de pesquisa vi que não tinha solução, voltei tudo para 32 bits.

Vou colocar uma lista das coisas que instalei e documentos que me ajudaram.

Programas

Eclipse – Versão 32 bits.

Download

Java JDK – Versão 32 bits.

Download

Lejos 0.85 e plugin para eclipse – Instruções no site

Site para downloads

NXT Drivers – Tem que ter instalado, é uma alternativa para não instalar o programa do lego completo, escolha a versão do seu sistema operacional.

Site para download

Lib USB – Drivers para a conversa via USB

Site para download

Widecomm Bluetooth Driver – Suporte para Bluetooth

Site para download

Agora os pdf para ajudar na instalação:

Como instalar e configurar o Java JDK

Download do site GUJ

Como instalar e configurar o Lejos no eclipse

Download

OBS: Se for usar Bluetooth , não esqueça de colocar a dependência para a biblioteca bluecove.jar no projeto, ela está na pasta de instalação do lejos.

É só seguir os passos explicados nos arquivos que não tem erro.

Share

Dica: Imagens com alpha com melhor acabamento

Sempre que precisei utilizar alguma imagem com canal alpha em meus projetos, apenas importava o bom e velho png com áreas transparentes, mas faz algum tempo que venho utilizando uma técnica simples mas que melhora muito o acabamento das bordas das imagens, como ilustra as imagens abaixo:

Perceba que fica sem os pixels perdidos nas bordas.

Como fazer? Siga os passos …

1 – Antes de tudo instale uma action no photoshop chamada Alpha Utility . DOWNLOAD AQUI

Para instalar é só colocar ela na pasta ( no meu caso ) C:\Program Files\Adobe\Adobe Photoshop CS5 (64 Bit)\Presets\Actions.

2 – Abra no photoshop uma imagem com alpha, para facilitar use a mesma que usei. DOWNLOAD

3 – Suavize a borda – Selecione o layer da imagem e click em Layer / Matting / Defring… , eu uso valor 3 na caixa, clique em OK.

4 – Duplique o layer da imagem, deixe o layer original em primeiro e o copiado em segundo( nomeie o layer como original e copiado para facilitar).

5 – Abra o painel de actions – Window / Actions e verifique se apareceu na lista a action Alpha Utility , se não apareceu clique no canto superior direito e clique em Alpha Utility e se não estiver na lista, você fez algo errado na instalação.

6 – Selecione o layer copiado e execute a action AlphaUtility / Dilate Many Times, sua imagem deverá ficar assim:

7 – Selecione os layer criados como na imagem acima e clique em Control + E ou Layer / Merge Layers

8 – Crie um layer novo e coloque abaixo de todos e preencha com a cor predominante da imagem , nesse caso é verde, use o conta gota.

9 – Dê um Control + Click no layer ORIGINAL para selecionar as áreas preenchidas.

10 – Troque para a aba CHANNELS e click no botão Save Selection as Channel

Pronto , salve o arquivo em PSD ou em outra extensão que suporte o alpha channel, eu salvo sempre em TGA.

O resultado final está AQUI, qualquer coisa deixe um comentário.

Share

Rotações bizarras em objetos importados no unity3D

Quando estava desenvolvendo o script OperDoorClick me deparei com um comportamento estranho do unity3D.

Quando se importa um objeto do 3D Studio Max (dos outros eu não sei) algumas vezes o pivo de rotação dele fica doidão, não tem uma explicação para isso, se tem não achei, não falam se o problema é no unity3D ou no exportador FBX ou no max, mas enfim, como para tudo existe uma gambiarra para fazer funcionar, lá vai duas para solucionar isso:

1 - Crie um cubo e coloque-o na mesma posição do seu objeto, aplique o mesmo material do seu objeto no cubo, transforme o cubo em edit poly e attach o seu objeto no cubo, selecione o modo de seleção de elemento, selecione o cubo e delete-o.

2 - Selecione seu objeto, transforme em editable poly, vá em utility e de um ResetXForm no objeto.

As vezes o problema é tão encardido que você precisa fazer os dois procedimentos, é chato mas funciona.

Clique aqui e veja o problema em ação, o mesmo script e configurações foram aplicados nos dois, o da direita é o original, o da esquerda foi feito a gambiarra 2.

Share

Scripts Unity 3D – OpenDoorClick.cs

Estou fazendo vários testes e apanhando bastante do Unity3D, sempre aprendendo mais com os erros do que com as vídeo aulas.
E desses testes começou a sair alguns scripts e resolvi separar, comentar o código e colocar no blog para quem quiser estudar ou usar em seus projetos livremente.
O primeiro script que disponibilizo é para se clicar no objeto e esse objeto ou outro objeto rotacionar, clicando novamente,  o objeto rotaciona para a rotação inicial , como abrir/fechar uma porta, foi utilizado o iTween para a interpolação.

OpenDoorClick.cs:

Alvo:
Objeto que irá rotacionar, porque você pode querer rotacionar o próprio objeto ou outro, por exemplo clicar na porta e ela abrir ou clicar na fechadura da porta e a porta abrir.

Eixo:
Se irá rotacionar no eivo X,Y ou Z

Ângulo de abertura:
Valor do ângulo que será somado ao atual para a rotação.

Tempo:
Tempo que levará a interpolação , contada em segundos

Interpolação:
O tipo de Ease que será utilizado , coloquei todos os disponíveis no iTween, para mais informações olhe no site da documentação.

Clique aqui para ver o script em ação

Download dos arquivos fonte.

Share

Dica – Flash CS5 corrompendo arquivos

Essa semana ajudei um amigo a dar manutenção em um site em flash que foi desenvolvido por outra pessoa e como não foi surpresa, o arquivo fonte veio uma bagunça, sem nomes nos movieclips nem nos layers.
Alterei tudo que deveria e salvei no Flash CS5, fui abrir o arquivo novamente e pronto , apareceu a mensagem:
Flash can not parse this document.
Pensei: Pronto, ferrou!
E ferrou mesmo, tive que refazer tudo, mas antes pesquisei no google sobre o caso e para minha surpresa é um bug do Flash CS5.
Eis o que acontece: O Flash CS5 quando salva um arquivo com um layer sem keyframe, não consegue re-ler esse arquivo, abaixo uma imagem para ilustrar.
Uma simples solução é criar um keyframe em branco, mesmo eu não vendo sentido para ter um layer sem keyframe, mas isso não vem ao caso.

Espero que isso ajude alguém.

Share

Passeio virtual interativo 3D – Folhamatic

Esse é um passeio virtual interativo que fiz junto com o meu amigo Daniel Magri enquanto trabalhavamos na XFrame 3D, o cliente foi a Folhamatic sistemas, que desejava apresentar o seu novo prédio.

Foi modelado no 3D Studio Max e programado no Quest 3D, conta com 3 tipos de interações ( Mouse e taclado , passeio pré-programado e interatividade com Wiimote), foi modelado quase todas as partes do prédio, que diga-se de passagem é enorme e muito mais bonito ao vivo, mas acho que o resultado ficou bacana, confiram.

Share