Depois de realizar uns movimentos básicos no Flash via teclado, chegou a hora de incrementar um pouco mais aquele código! Que tal colocá-lo em uma classe, para que possa ser reutilizado inúmeras vezes…? E quando digo inúmeras vezes, significa várias vezes em projetos diferentes ou no mesmo projeto! Primeiro, você vai precisar do código escrito naquela dica ( “Movimentos básicos no Flash via teclado” ). Descompacte-o e em seguida, crie uma pasta onde está o seu FLA para acomodar suas classes. Eu decidi chamá-la de actionScript.

O nome da pasta é importante!
Abra o Flash, vá no menu File, escolha New e finalmente, escolha ActionScript File. O nome do seu arquivo também importa na programação – eu decidi chamar o meu de basicGame.as - e agora, vamos começar a programar!
Primeiro, identifique o pacote de classes com o nome da pasta que você criou e crie a classe com o mesmo nome do seu arquivo “.AS“. Seu arquivo deve ficar mais ou menos assim:
package actionScript {
public class basicGame {
// Vamos inserir o código do outro arquivo aqui!
}
}
Diferente de se programar na timeline, é necessário cuidar da importação de bibliotecas quando se está trabalhando com uma classe. Vou importar 3 bibliotecas básicas - Event, MouseEvent e KeyboardEvent – e mesmo que eu não esteja usando MouseEvent neste momento, eu pretendo usá-la em breve. Então o código fica assim:
package actionScript {
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.events.Event;
public class basicGame {
// Vamos inserir o código do outro arquivo aqui!
}
}
Depois, copie o código criado no FLA “movimentospeloteclado.fla” dentro da sua classe. Mas se você tentar rodar agora, vários erros de compilação irão surgir. O código copiado tem algumas ações realizadas em tempo de execução, o que é impossível para uma classe. Devemos passar estes códigos para uma função construtora, que é chamada automaticamente no momento de criação da instância da classe.
Basta nomear uma função com o mesmo nome da classe, para ela ser uma função construtora!
package actionScript {
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.events.Event;
public class basicGame {
public function basicGame():void {
// Conteúdo da Função!
}
}
}
Vamos recapitular algumas coisas… O nosso código original adicionava três Listeners ao Stage ( Um para detectar o “pressionar” de um botão do teclado, outro para detectar o “soltar” de um botão do teclado e o outro iria ser executado na velocidade do framerate, com a missão de realizar as ações necessárias ) e controlava um MovieClip chamado bodyMovie, movendo-o de acordo com as setas do teclado. Mas a nossa classe não tem stage, e dentro dela, também não há um MovieClip chamado bodyMovie, pois ele está na timeline do Flash. Como resolver isto…?
Vamos adicionar dois parâmetros na função construtora. O primeiro parâmetro será a referência do MovieClip a ser controlado, e o segundo, a referência do stage. Depois de recebê-los como parâmetro, devemos guardá-los em variáveis privadas que toda a classe possa enxergar, à qualquer momento. O código fica mais ou menos assim:
package actionScript {
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.events.Event;
public class basicGame {
private var myChar:Object;
private var myRoot:Object;
public function basicGame(c:Object,s:Object):void {
myChar = c;
myRoot = s;
}
}
}
Na hora de completar a nossa classe com o código original do artigo anterior, você não pode esquecer de trocar toda a referência à bodyMovie pela variável myChar e toda referência ao stage pela variável myRoot. O código completo desta dica fica assim:
package actionScript {
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.events.Event;
public class basicGame {
private var myChar:Object;
private var myRoot:Object;
private var pressLeft:Boolean = new Boolean(false);
private var pressUp:Boolean = new Boolean(false);
private var pressRight:Boolean = new Boolean(false);
private var pressDown:Boolean = new Boolean(false);
public function basicGame(c:Object,s:Object):void {
myChar = c;
myRoot = s;
myRoot.addEventListener(KeyboardEvent.KEY_DOWN, pressButtonDown);
myRoot.addEventListener(KeyboardEvent.KEY_UP, pressButtonUp);
myRoot.addEventListener(Event.ENTER_FRAME, runIt);
}
private function pressButtonDown(event:KeyboardEvent):void {
switch (event.keyCode) {
case 37 : //ESQUERDA;
pressLeft = true;
break;
case 38 : //CIMA;
pressUp = true;
break;
case 39 : //DIREITA;
pressRight = true;
break;
case 40 : //BAIXO;
pressDown = true;
break;
}
}
private function pressButtonUp(event:KeyboardEvent):void {
switch (event.keyCode) {
case 37 : //ESQUERDA;
pressLeft = false;
break;
case 38 : //CIMA;
pressUp = false;
break;
case 39 : //DIREITA;
pressRight = false;
break;
case 40 : //BAIXO;
pressDown = false;
break;
}
}
private function runIt(e:Event):void {
if (pressLeft) {
if (myChar.x > 0) {
myChar.x -= 5;
}
}
if (pressRight) {
if (myChar.x < 400) {
myChar.x += 5;
}
}
if (pressUp) {
if (myChar.y > 0) {
myChar.y -= 5;
}
}
if (pressDown) {
if (myChar.y < 300) {
myChar.y += 5;
}
}
}
}
}
Agora é só importar a sua classe no Flash e criar uma instância dela! Então, na timeline do seu arquivo FLA, faça o seguinte:
import actionScript.basicGame; var obj:basicGame = new basicGame(this.bodyMovie,stage);
Desta forma, o seu Flash com classe estará fazendo exatamente a mesma coisa do Flash do exemplo anterior. Mas agora, você pode instanciá-lo facilmente, quantas vezes você quiser. Apenas como exemplo, dupliquei o nosso MovieClip, pintei ele de diversas cores com a propriedade Tint e redimensionei aleatoriamente. Agora, é fácil controlar os novos MovieClips, em poucas linhas:
import actionScript.basicGame; var obj1:basicGame = new basicGame(this.bodyMovie1,stage); var obj2:basicGame = new basicGame(this.bodyMovie2,stage); var obj3:basicGame = new basicGame(this.bodyMovie3,stage); var obj4:basicGame = new basicGame(this.bodyMovie4,stage);
Para experimentar, clique no Flash abaixo ( para o Browser dar foco ao Flash ) e use as setas do teclado para controlar os 4 MovieClips. Note que os MovieClips se mexem juntos, até que eles encontrem o limite nos cantos do Flash.
Se desejar, clique aqui e baixe este exemplo completo, salvo em Flash CS3. E até a próxima dica!
