Primeiro, nós devemos pensar de novo, o que é tiro suponho que fazer e como vai se comportar nossas balas. Quando a tecla é pressionada (tecla SHIFT), objeto de bala e clipe de filme são criados no lado correto do herói. A bala deve começar a mover em linha reta em direção ao herói enfrenta. Se a bala atinge a parede ou inimigo, ele é destruído. Se acertar inimigo, inimigo é também destruída.
A velocidade da bala deve ser maior, então a velocidade do herói, a menos que você deseja dar herói alguma maneira de parar as balas em movimento. Geralmente os inimigos não mudo ver balas vindo, mas você poderia criar inimigos que tentam evitar balas. Você também pode fazer disparar contra os inimigos do herói.
Prepare to Shoot
Empate filme bala clip e certifique-se o seu conjunto a ser exportado como "bala" para que possamos anexá-lo ao palco. Os gráficos dentro mc bala devem ser alinhados ao centro.
Permite declarar objeto bala:
CÓDIGO
game.Bullet = function () ();
game.Bullet.prototype.speed = 5;
game.Bullet.prototype.dirx = 0;
game.Bullet.prototype.diry =- 1;
game.Bullet.prototype.width = 2;
game.Bullet.prototype.height = 2;
game.Bullet.prototype.speed = 5;
game.Bullet.prototype.dirx = 0;
game.Bullet.prototype.diry =- 1;
game.Bullet.prototype.width = 2;
game.Bullet.prototype.height = 2;
Bullets vai passar com a velocidade de 5 pixels por carrapato. Eles têm largura / altura de 2 pixels, isso é o suficiente para danificar o inimigo.
Agora o dirx propriedades / diry fará bala em movimento. São coisas que nós mesmos utilizados na função moveChar. Se dirx = 1, bala vai mover para a direita, diry =- 1 faz subir. Nós vamos realmente tomar os valores de dirx / diry do objeto char, mas no início de The Game, quando hasnt char foi movida ainda, mas o jogador quer filmar, vamos usar os valores padrão para fazer mover o marcador.
Adicione duas Propeties novo objeto de jogo:
CÓDIGO
game = (tileW: 30, tileH: 30, currentMap: 1, bulletcounter: 0);
game.bullets = new Array ();
game.bullets = new Array ();
O bulletcounter será contar o número de balas que usamos e ajuda a dar a cada nova marca novo nome. Primeiro ponto que atirar em The Game, será nomeado bullet0, então bullet1 e assim todo o caminho até bullet100. Então nós redefinir o bulletcounter. Nós, em teoria, poderia deixá-lo levantar para sempre, mas quem sabe que tipo de coisas desagradáveis podem acontecer em seguida.
game.bullets em uma matriz de referência que irá realizar a todas as balas que temos que voam ao redor. No início a sua matriz vazia.
Para o objeto char adicionar propriedade shootspeed para fazer ele parar entre os disparos:
CÓDIGO
char = (xtile: 2, ytile: 1, speed: 4, shootspeed: 1000);
Maior valor shootspeed faz o char disparar o valor mais lento e mais rápido. Valor de 1000 é exatamente 1 segundo entre os disparos.
Para os inimigos a morrer, temos que removê-los do The Game. Mudar a parte de criação inimigos na função buildMap:
CÓDIGO
game.currentEnemies = [];
for (var i = 0; i <enemies.length; + + i) (
var name = "inimigo" + i;
game [name] = new game [ "Enemyp" + inimigos [i] [0]];
game [name]. id = i;
jogo (game.currentEnemies.push [nome]);
for (var i = 0; i <enemies.length; + + i) (
var name = "inimigo" + i;
game [name] = new game [ "Enemyp" + inimigos [i] [0]];
game [name]. id = i;
jogo (game.currentEnemies.push [nome]);
E na função enemyBrain substituir a linha:
CÓDIGO
var name = "inimigo" + i;
com
var name = "inimigo" + game.currentEnemies [i]. id;
Usaremos currentEnemies para prender os nomes de todos os inimigos no palco. Quando o inimigo é morto, vamos retirá-la da matriz. A nova propriedade "id" ajuda-nos a destruir o inimigo objeto colocado na matriz inimigos.
No detectKeys função de adicionar um código após a verificação de teclas:
CÓDIGO
if (Key.isDown (Key.SHIFT) e getTimer ()> ob.lastshot + ob.shootspeed) (
_root.shoot (OB);
)
_root.shoot (OB);
)
Se a tecla Shift está pressionada e passou tempo suficiente para o herói para atirar novamente, vamos chamar atirar função.
Em início de função moveChar adicionar duas linhas para salvar a direção do objeto atual:
CÓDIGO
ob.dirx = dirx;
diry ob.diry =;
diry ob.diry =;
Nós iremos usar esses para determinar o caminho que irá mover as nossas balas.
Shoot
Para criar as balas e dando tiros de todos os dados de que necessitam para o sucesso vôos mortais, vamos utilizar nova função chamada de "disparar":
CÓDIGO
atirar function (ob) (
ob.lastshot = getTimer ();
game.bulletcounter + +;
if (game.bulletcounter> 100) (
game.bulletcounter = 0;
)
var name = "bala" + game.bulletcounter;
game [name] = new game.Bullet;
game [name]. game.bulletcounter = id;
jogo (game.bullets.push [nome]);
if (ob.dirx ou ob.diry) (
game [name]. dirx = ob.dirx;
game [name]. diry ob.diry =;
)
game [name]. xtile = ob.xtile;
game [name]. ytile = ob.ytile;
game.clip.attachMovie ( "bala", nome, 10100 + game.bulletcounter);
game [name]. clip = game.clip [nome];
game [name]. x = (ob.x + jogo [nome] dirx. ob.width *);
game [name]. y = (ob.y + jogo [nome]. diry ob.height *);
game.clip [nome]. _x = game [name]. x;
game.clip [nome]. _y = game [name]. y;
)
ob.lastshot = getTimer ();
game.bulletcounter + +;
if (game.bulletcounter> 100) (
game.bulletcounter = 0;
)
var name = "bala" + game.bulletcounter;
game [name] = new game.Bullet;
game [name]. game.bulletcounter = id;
jogo (game.bullets.push [nome]);
if (ob.dirx ou ob.diry) (
game [name]. dirx = ob.dirx;
game [name]. diry ob.diry =;
)
game [name]. xtile = ob.xtile;
game [name]. ytile = ob.ytile;
game.clip.attachMovie ( "bala", nome, 10100 + game.bulletcounter);
game [name]. clip = game.clip [nome];
game [name]. x = (ob.x + jogo [nome] dirx. ob.width *);
game [name]. y = (ob.y + jogo [nome]. diry ob.height *);
game.clip [nome]. _x = game [name]. x;
game.clip [nome]. _y = game [name]. y;
)
Primeiro temos que passou de objeto para a função. Neste caso, é objeto char como tiro foi chamado de função detectKeys, mas se tiro seria disparado pelo inimigo, objeto inimigo seria aprovada.
Usamos getTimer () para economizar o tempo este tiro foi disparado na propriedade lastshot.
Em seguida, adicione 1 para a propriedade game.bulletcounter e se for> 100 criámos bulletcounter volta para 0.
Agora vamos criar novas bala usando bulletcounter para dar o nome de bala novo, único e que nós também conservar este número no objeto bala. Nós vamos adicionar uma referência à nova marca para a matriz game.bullets.
A condição se com dirx / verifica se diry char foi movido. Se hasnt jogador moveu o char ainda, o doesnt objeto char tem dirx / diry propriedades e teremos a dirx default / diry da bala modelo. No entanto, se o char foi movido, montamos dirx balas / diry igual aos chars.
Para fazer aparecer bala pelo char, precisamos guardar posição chars. ob.xtile e ob.ytile são copiados para a bala.
A última parte do código cria novo clipe de filme para o marcador, calcula a sua posição na tela e ajusta-lo lá. Parte interessante pode ser exatamente como é a posição balas encontradas:
CÓDIGO
game [name]. x = (ob.x + jogo [nome] dirx. ob.width *);
posição (ob.x), que é onde o centro do char é. As balas geralmente não saem do centro do herói, nós adicionamos largura de char para isso. Mas desde que a largura é multiplicado pelo valor da dirx, a bala vai ser colocado à esquerda do char (dirx =- 1), direito de char (dirx = 1) ou no centro (dirx = 0). Uh, você pode perguntar, e não no centro? Mas sim, pode ser dirx 0 somente se diry é 1 ou -1, de modo a bala termina acima ou abaixo do char.
Matar!
No final do detectKeys função de adicionar a linha para ligar para segunda nova função que irá mover o marcador e olhar se mataram algo:
CÓDIGO
_root.moveBullets ();
E a própria função:
CÓDIGO
moveBullets function () (
for (var i = 0; i <game.bullets.length; + + i) (
var ob game.bullets = [i];
getMyCorners (ob.x + ob.speed * ob.dirx, ob.y + ob.diry * ob.speed, ob);
if (ob.downleft e ob.upleft e ob.downright e ob.upright) (
moveChar (ob, ob.dirx, ob.diry);
) Else (
ob.clip.removeMovieClip ();
excluir do jogo [ "bullet" + game.bullets [i]. id];
game.bullets.splice (i, 1);
)
for (var j = 0; j <game.currentEnemies.length; j + +) (
var name = "inimigo" + game.currentEnemies [j]. id;
var jogo = obenemy [nome];
xdist var = ob.x - obenemy.x;
ydist var = ob.y - obenemy.y;
if (Math.sqrt xdist (xdist ydist * + * ydist) <ob.width + obenemy.width) (
obenemy.clip.removeMovieClip ();
excluir do jogo [ "inimigo" + game.currentEnemies [j]. id];
game.currentEnemies.splice (j, 1);
ob.clip.removeMovieClip ();
excluir do jogo [ "bullet" + game.bullets [i]. id];
game.bullets.splice (i, 1);
)
)
)
)
for (var i = 0; i <game.bullets.length; + + i) (
var ob game.bullets = [i];
getMyCorners (ob.x + ob.speed * ob.dirx, ob.y + ob.diry * ob.speed, ob);
if (ob.downleft e ob.upleft e ob.downright e ob.upright) (
moveChar (ob, ob.dirx, ob.diry);
) Else (
ob.clip.removeMovieClip ();
excluir do jogo [ "bullet" + game.bullets [i]. id];
game.bullets.splice (i, 1);
)
for (var j = 0; j <game.currentEnemies.length; j + +) (
var name = "inimigo" + game.currentEnemies [j]. id;
var jogo = obenemy [nome];
xdist var = ob.x - obenemy.x;
ydist var = ob.y - obenemy.y;
if (Math.sqrt xdist (xdist ydist * + * ydist) <ob.width + obenemy.width) (
obenemy.clip.removeMovieClip ();
excluir do jogo [ "inimigo" + game.currentEnemies [j]. id];
game.currentEnemies.splice (j, 1);
ob.clip.removeMovieClip ();
excluir do jogo [ "bullet" + game.bullets [i]. id];
game.bullets.splice (i, 1);
)
)
)
)
Esta função percorre todas as balas na matriz de balas.
Usando getMyCorners vamos saber se a bala atual irá bater na parede ou não. Se nenhum dos seus cantos bateu na parede, vamos passar a bala com a função moveChar.
Agora, se a bala teria atingido parede, temos que destruí-lo. Há 3 coisas que precisamos fazer para se livrar do marcador:
+ Remover a bala mc (usando removeMovieClip)
+ Remover objeto bala (com função de apagar)
+ Retirar bala da atual matriz de balas.
Poderíamos deixar o objeto bala em The Game, pois sem o seu clipe de filme que você não pode vê-lo e quando removidos balas matriz que costuma ser acessada novamente, mas depois de 100 balas, o jogo vai olhar como scrapyard. Sua bom não deixar lixo atrás de você.
Quando temos sucesso movido a bala e ele hasnt bater qualquer paredes ainda, começamos a verificar se atingiu algum inimigo. Loop por todos os inimigos na matriz currentEnemies, podemos calcular a distância entre o ponto atual e atual inimigo. Se eles chegarem muito perto, destruímos os dois.
Se você quiser que os inimigos a morrer para sempre, o que significa que eles não ressuscitar depois de sair do mapa e voltar, coloque 1 linha após o cálculo da distância:
CÓDIGO
myEnemies [game.currentMap] obenemy.id [] = 0;
Você pode fazer várias coisas para tornar a fotografia mais inetresting:
+ Limitar a quantidade de balas disponíveis. Você pode definir variáveis no começo e cada bala é baleado tempo, reduzi-la por 1, só permitindo fotografar se seu> 0.
+ Limite de apenas 1 ponto no palco. Você pode fazer isso verificando game.bullets e se o seu comprimento é> 0 não permitem fotografar.
+ Fazer inimigos disparar balas também. Seria fácil fazê-los disparar em momentos aleatórios em direções aleatórias, mesma maneira que a mudança do movimento.
+ Fabricar armas diferentes para escolher. Você poderia declarar bala vários modelos e atribuir valores diferentes para cada dano, para que possa obter melhores armas e matar os inimigos rapidamente.
Você pode fazer download do fla com todo o código e filme criado aqui.
Tiro com salto vista lateral:
Fla Fonte para jumper lado vista aqui.
Bugfix em 20.12.2003. No moveBullets função da linha:
CÓDIGO
var name = "inimigo" + j;
deve ser
CÓDIGO
var name = "inimigo" + game.currentEnemies [j]. id;
Se você ver versão antiga dele, por favor, corrigi-lo. Graças a cristã e Travis para encontrar o bug.
Bugfix em 1.03.2004. Na função enemyBrain a linha:
CÓDIGO
var name = "inimigo" + i;
deve ser
CÓDIGO
var name = "inimigo" + game.currentEnemies [i]. id;

Help














