Avançar para o conteúdo principal

Um jogo simples em Flash e AS3.0

Agora para uma coisa totalmente diferente, um pouco de Flash e AS3.0.
Este jogo muito simples tem como principal objetivo introduzir um pouco de código que permite gerir eventos do teclado, controlar imagens (sprites) totalmente por código, definir eventos associados a temporizadores (timers) e ainda gerar números aleatoriamente.
O resultado final será qualquer coisa como isto:


Então vamos a isso...
Para começar vamos criar duas camadas (layers) na linha de tempo (Timeline) como se apresenta a seguir:

Uma camada vai servir para inserir os objetos, neste caso três Clipes de Filme (Movieclips): a nossa nave, o inimigo e um projetil.

Na outra camada vamos inserir o código que vamos utilizar.

O movieclip que representa o inimigo vai ter o nome inimigo, o nosso será a nave e o projetil chamasse bala.
O movieclip bala vai ficar invisível inicialmente, para isso utilizamos a propriedade alpha e definimos em 0.

Começamos por associar uma função ao que teclamos, para isso fazemos:
     stage.addEventListener(KeyboardEvent.KEY_DOWN,teclado);

Esta linha associa uma função chamada teclado aos eventos gerados pelas teclas que vamos premindo.
A função fica com este aspeto:

function teclado(e:KeyboardEvent):void{
if (e.keyCode == Keyboard.LEFT){
if(nave.x>30) nave.x -=5;
}
if (e.keyCode == Keyboard.RIGHT){
if(nave.x<500) nave.x +=5;
}
if (e.keyCode == Keyboard.UP){
if(nave.y>200) nave.y -=5;
}
if (e.keyCode == Keyboard.DOWN){
if(nave.y<370) nave.y +=5;
}
if (e.keyCode == Keyboard.SPACE){
if(estadobala==1) return;
estadobala=1;
bala.alpha=100;
bala.x=nave.x+nave.width/2+bala.width/2;
bala.y=nave.y;
}
}
Basicamente controlamos as teclas CIMA, BAIXO, ESQUERDA e DIREITA para movimentar a nave com base nas propriedades x e y que indicam a localização da nave no palco (stage).

As condições dentro de cada if evitam que a nave saia do stage.

Por fim controlamos a BARRA DE ESPAÇO para fazer disparar o projetil, para isso temos uma variável que indica o estado da bala, isto porque só vamos deixar disparar uma de cada vez, assim se a bala está a percorrer o palco não dispara outra, se dispara a bala então coloca o alpha da bala a 100 (torna a bala visível) e posicionamos a bala à frente da nave para esta iniciar o seu trajeto.

A variável estadobala é definida assim:

var estadobala:int=0;

Vamos ter ainda outras variáveis:
var velocidade_inimigo:int=10;
var velocidade_bala:int=15;
var pontuacao:int = 0;

A primeira e a segunda indicam a velocidade a que se movimentam o inimigo e a bala, respetivamente e por fim a pontuação do jogador.

Agora os eventos que controlam o inimigo e a bala, para isso temos de iniciar dois temporizadores para essa tarefa:
var timer_inimigo:uint =setInterval(moveinimigo,100);
var timer_bala:uint =setInterval(movebala,100);

As variáveis definidas permitem controlar os eventos, para este exemplo nãos as vamos utilizar e podiam não existir.

Por fim a 'inteligência' do inimigo:
function moveinimigo():void {
inimigo.x+=velocidade_inimigo;
if(inimigo.x>520 && velocidade_inimigo>0){
velocidade_inimigo*=-1;
inimigo.x+=velocidade_inimigo;
}
if(inimigo.x<30 && velocidade_inimigo<0){
velocidade_inimigo*=-1;
inimigo.x+=velocidade_inimigo;
}
}

Que se resume a mover de um lado para o outro, não saindo do palco.

E ainda a bala:
function movebala():void {
if(estadobala==0) return;
bala.y-=velocidade_bala;
/*testar colisão da bala com o inimigo*/
if(bala.hitTestObject(inimigo)){
estadobala=0;
inimigo.x=sortear(5,500);
bala.alpha=0;
pontuacao+=10;
label1=pontuacao.toString();
label.text = String("Pontuação: " + label1);
}
//A bala saiu do palco?
if(bala.y<0){
estadobala=0;
bala.alpha=0;
}
}

Antes que me esqueça o código que faz aparecer a pontuação:
var label:TextField = new TextField();
var label1:String = pontuacao.toString();
addChild(label);
label.text = String("Pontuação: " + label1);

O código que atualiza a pontuação está na função que movimenta a bala.

Por fim a função que sorteia a coluna onde o inimigo aparece quando lhe acertamos:
function sortear(low:Number=0, high:Number=1):Number
{
  return Math.floor(Math.random() * (1+high-low)) + low;
}


Comentários

Mensagens populares deste blogue

Upgrade do Windows Home para Pro sem formatar

 Há algum tempo que tentava fazer o upgrade do meu Windows 10 da versão Home para a versão Pro, mas chegava sempre a um ponto em que me era solicitado para formatar o sistema e não estava para isso. Finalmente conseguinte seguindo estes passos: - seguinte estes passos  utilizei uma das chaves genéricas para o Windows 10 Pro e fui a Settings > Update & Security > Activation > Change the product key; - após inserir uma das chaves o Windows instala as funcionalidades Pro e pede para reiniciar; - agora tem o Windows Pro mas não está ativado, assim fui ao site urcdkeys  onde comprei uma chave para o Windows Pro por menos de €20; - com essa chave voltei a funcionalidade Change the product key e ativei o Windows; - e pronto, Windows Pro ativado sem formatar ou reinstalar. Importante : eu não tenho nada a ver com o site urcdkeys por isso a vossa experiência pode correr de forma diferente da minha.

Vamos fazer um carro com o Unity 3D

Neste artigo vamos fazer um carro, simples, com o Unity 3D. A ideia é utilizar o motor de física do Unity 3D para simular o comportamento do carro. Os passos a seguir são: [1] - Criar um projeto novo

Tem troco

Para hoje um pequeno programa que dá troco, bem dar não dá mas calcula o troco a dar em função das moedas disponíveis. Neste projeto vamos utilizar o novo Visual Studio 2012. Como era de se esperar vamos iniciar um projeto novo: Agora adicionamos os seguintes elementos:  - um botão para calcular as moedas a dar de troco  - um botão para repor o número de moedas iniciais disponíveis  - uma textbox para introduzir o valor a pagar  - uma textbox para introduzir o valor entregue  - umas labels para informar o utilizador do que deve introduzir e outra para mostrar o troco  - por fim uma grelha para mostrar os valores das moedas e as quantidades disponíveis de cada uma. A janela principal do programa fica assim: Agora o código, primeiro o evento load do formulário, neste vamos definir os valores das moedas e as respetivas quantidades Para guardar estes valores vamos necessitar de uma variável definida ao nível do formulário, logo abaixo da definição da class: Public Class Form1     Public mo