No post de hoje, apresentarei como detectar colisões entre Movie Clips no Flash 8. Tal recurso é importantíssimo, por exemplo, no desenvolvimento de jogos. A animação abaixo demonstra um exemplo de colisão, onde dois “smiles” se chocam. Quando a colisão ocorre, um fica vermelho de raiva e o outro fica roxo após a pancada (comentário infame… relevem…)! Para colidir os smiles, clique sobre a animação e pressione a tecla direcional -> do teclado para mover o smile esquerdo em direção do direito.
Let’s go! Crie um novo documento flash. Desenhe ou importe algo para a área de desenho e o converta para Movie Clip (selecione o objeto, pressione F8 e escolha a opção Movie Clip). Copie e cole o Movie Clip para a área de desenho (mesmo layer, mesmo frame). Procure deixá-los distantes um do outro, alinhados. Selecione o Movie Clip da esquerda, pressione Ctrl + F3 e, na aba Properties (propriedades), nomeie o Movie Clip para smile1 (em instance name). Faça o mesmo com o Movie Clip da direita, nomeando-o para smile2.
Agora vem a inteligência da “parada”. Copie o código abaixo e cole nas ações de um dos Movie Clips (selecione um Movie Clip, pressione F9 e cole o código abaixo na aba Actions, ou ações):
onClipEvent(enterFrame)
{
if (_root.smile1.hitTest(_root.smile2)) {
var cor1:Color = new Color(_root.smile1);
cor1.setRGB(0xFF0000);
var cor2:Color = new Color(_root.smile2);
cor2.setRGB(0x330033);
}
if(Key.isDown(Key.RIGHT))
{
this._x = this._x + 10;
}
}
Explicarei o código: Como o código acima é aplicado em um Movie Clip, precisamos programar o action script no corpo da trigger onClipEvent. O parâmetro enterFrame da trigger indica que o evento ocorrerá logo quando o primeiro frame do MovieClip for ativado.
O segredo para detectarmos uma colisão entre Movie Clips no Flash está no uso da função hitTest(), localizado na terceira linha. Podemos interpretar a mesma da seguinte maneira: Se (if) o Movie Clip smile1, localizado na área de desenho (_root.smile1) colidir (hitTest) com o Movie Clip smile2, também localizado na área de desenho (_root.smile2) então ({)…
Então ambos deverão mudar de cor. Poderemos fazer isso através da função setRGB(valor de cor em hexadecimal). Tal função só é aplicada em variáveis do tipo cor. Logo, declaramos a variável do tipo Color cor1 (var cor1: Color) e indicamos que a mesma apontará para a cor do Movie Clip smile1, localizado na área de desenho (= new Color(_root.smile1)). Faremos o mesmo para a variável cor2, que apontará para a cor do Movie Clip smile2. Após a declaração das variáveis de cores, poderemos manipular as cores dos Movie Clips a partir delas, graças a função setRGB (cor1.setRGB(0xFF0000) muda a cor do Movie Clip smile1 para vermelho, e cor2.setRGB(0×330033) muda a cor do Movie Clip smile2 para roxo).
O segundo if faz com que o Movie Clip que contenha o script ande para a esquerda quando o usuário pressionar a tecla direcional ->. Maiores detalhes sobre a movimentação de Movie Clips a partir do teclado foram demonstrados no post Flash - Controlando Movie Clips através do teclado. Visite o referido post para maiores detalhes!
Pronto! Teste sua animação pressionando Ctrl + Enter. Poste suas dúvidas nos comentários e/ou CLIQUE AQUI para baixar o arquivo .fla deste exemplo. E divirta-se!
Até a próxima!
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=54eaecaf-8778-4ce1-b62a-f65b961f2fbb)
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=d94d8d99-6453-4109-9e25-4d42a8a9032d)
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=e717c211-3ba9-4051-a2af-d6293b74ea8e)
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=6ef567f5-3292-4d50-b001-c0a33c4e2ba0)
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=58450418-66bf-4e4f-90c6-f5af3bd8c449)
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=3c57e574-6b69-4760-a0fe-1032ad7a11d2)
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=590fa362-c527-4388-9bd3-f9f455a320fe)