[Action Script] Jogo estilo Space Invaders - Adobe Flash

digor7

Power Member
Tou a seguir este tutorial

http://video-animation.com/flash_12.shtml

e não estou a conseguir pôr a nave a disparar. Sempre que vou a testar a suposta bala dispara logo e não dá para disparar mais... a parte que estou a fazer é esta traduzida pa pt:

Código:
As Balas 

Agora vamos fazer uma bala. Desenhe uma forma oval ou de qualquer forma. Selecione-oe 
pressione a tecla F8 (converter para símbolo). Chame-lhe "Bullet" e torná-lo um movieClip. 
Na janela de propriedades Bullet, dar-lhe o nome de instância 
"bala" O que precisamos fazer é criar um ponto é sempre o rato 
Cliquei e quando ele vai offstage para destruí-lo ou voltar a utilizá-lo. 

Temos de escrever um algoritmo para descrever a seqüência de eventos para 
movendo uma bala. 

/ / Mover o ponto em 30 pixels por quadro para a parte superior da moldura 
/ / Quando a bala atinge o início da etapa, destruí-lo ou voltar a utilizá-lo. 
Vamos fazê-lo. Selecione seu bala no palco e abrir a janela Acção 
e colocar neste código: 

onClipEvent(enterFrame){
	// move it 30 pixels towards the top of screen
	this._y -= 30;
	// if bullet goes offstage , destroy it
	if(this._x<0 || this._x>Stage.width || this._y < 0)
	{
		this.removeMovieClip();
	}
}
Selecione seu defensor MC e adicionar este código após o enterFrame código: 


// when the mouse cliks
onClipEvent(mouseDown)
{
	// duplicate the bullet mc
_root.bullet.duplicateMovieClip("bullet"+bulletNum,bulletNum);
	// set the coords to the mouse clik
	eval("_root.bullet" + bulletNum)._x = this._x;
	eval("_root.bullet" + bulletNum)._y = this._y;
	// increment the bullet number
	bulletNum++;
	// if more than 50 bullets , start again at 0
	if(bulletNum>50)
	bulletNum = 0;
}
O código acima 
duplicatas a bala mc e confere-lhe um número de "bulletNum" 
Em seguida, define o início x e y coords da bala ao x e y 
coordenadas de onde o mouse foi clicado. 
O bulletNum é incrementado para que a próxima bala criado por um 
mouseclick tem um número de bulletNum 1. 
Então, se o bulletNum for igual ou superior a 50, a bulletNum é reposto a 0 
e começa a contar novamente. 
Até agora o nosso defensor deve mover da esquerda para a direita seguindo o mouse 
e deve disparar balas quando a esquerda cliques do mouse

alguém me sabe dizer porque não consigo?
 
Tens disponível no site o FLA com o jogo completo. Podes procurar lá a solução ao teu problema.

A programação existente dá um pontapé a todas as best practices. Começando pela utilização do _root para referenciar instâncias de algo.

Por exemplo, com a utilização do _root, um dia que queiras colocar esse jogo dentro de um outro swf, deixa de funcionar.
 
Se estás a dar os primeiros passos, sugiro que comeces logo com AS3, especialmente se gostas de jogos. Para além de ser o futuro, é bem mais rápido a executar.
 
Back
Topo