parte 8 – Matando inimigos ao pular em cima deles

O que veremos aqui?

Neste post, mostrarei como contabilizar matar um inimigo ao pular em cima dele.

Como matar um inimigo no jogo?

Existem várias formas de matar um inimigo, neste post veremos a mais simples: pulando em cima dele.

O conceito é que quando o jogador encostar no inimigo, deve-se verificar se a parte de baixo do jogador (os pés) encostaram na parte de cima do inimigo (cabeça). Neste caso, configura-se um crime doloso, ou seja, quando há intenção de matar hehe.

Se o jogador encostar no inimigo de outra maneira qualquer – lado com lado por exemplo – então o inimigo terá matado o jogador.

Lembrando que futuramente iremos desenvolver níveis de morte, igual ao Super Mario, quando o Mario está grande e apenas fica pequeno se alguém encostar nele.

Inicialmente vamos carregar o som de morte do inimigo e de morte do jogador, para deixar um pouco mais divertido o jogo. Edite a função carregaAssets e insira as linhas:

function carregaAssets(){
    // Código que já estava aqui...

    // Carrega som para pulo em cima de algo (inimigo por exemplo)
    game.load.audio('kick', ['assets/kick.ogg']);
    // Carega som de fim do jogo
    game.load.audio('lose', ['assets/lose.ogg']);
}

Os dois arquivos de audio (kick.ogg e lose.ogg) você pode baixar no arquivo compactado abaixo:

Agora, na função criaCenario, vamos iniciar os sons adicionados. Vamos também mudar a forma de criar o som da moeda, ou seja, vamos criar os objetos de som todos em um lugar, dentro desta função criaCenario:

function criaCenario(){
    // Código que já estava aqui...

    // Adiciona objeto de controle de músicas do jogo
    musicaMoedas = game.add.audio('collect-coin', 1, true);
    musicaKick = game.add.audio('kick', 1, true);
    musicaLose = game.add.audio('lose', 1, true);
}

Como já havíamos criado o objeto musicaMoedas dentro da função criaMoedas, edite-a e remova a linha que define o objeto musicaMoedas:

function criaMoedas(){
    // Remova a linha abaixo:
    musicaMoedas = game.add.audio('collect-coin', 1, true); <- remover esta linha

    // Cria grupo de moedas
    coins = game.add.group();
    // Habilita corpo nos elementos deste grupo
    coins.enableBody = true;

    // Demais código aqui...
}

Agora, modifique a função que verifica se o jogador encostou em um inimigo e em vez de usar o overlap (sobreposição) use a função collide:

function verificaSeEncostouInimigo(){
    // Verifica colisão entre jogador e inimigos
    game.physics.arcade.collide(jogador, inimigos, encostouInimigo);
}

E então modifique a função encostouInimigo deixando-a assim:

/**
 *  Função que gerencia conexão com inimigo
 */
function encostouInimigo (jogador, inimigo) {
    // Verifica se pulou em cima do inimigo
    if (jogador.body.touching.down && inimigo.body.touching.up){
        // Mata inimigo
        inimigo.kill();
        // Faz jogador pular
        jogador.body.velocity.y = -650;
        // Executa música de pulo em algo
        musicaKick.play('', 0, 1, false);
    }else{
        // Termina jogo
        fimDoJogo();
    }
}

Veja que agora a função encostouInimigo, avalia se o jogador pulou em cima do inimigo detectando colisão da parte de baixo do jogador e a parte de cima do corpo do inimigo.

Caso tenha sido um pulo em cima do inimigo, esta função remove o inimigo, do contrário chama a função fimDoJogo, que deverá ser criada agora:

/**
 *  Função que termina o jogo, removendo jogador e rodando música
 *  de final do jogo. Por fim, exibe texto para usuário informando que morreu
 */
function fimDoJogo(){
    // Remove jogador do jogo
    jogador.kill();

    // Mostra texto informando morte do jogador
    var posicaoJogador = jogador.body.position.x;

    var textoJogo = game.add.text(posicaoJogador - 150, game.camera.height / 2, "Você morreu", {
        font: "48px Arial",
        fill: "#ff0044",
        align: "center"
    });

    // Roda música de fim do jogo
    musicaLose.play('', 0, 1, false);
}

Veja que separamos a lógica de detectar colisão com inimigo e terminar o jogo. Isso porque haverá outros lugares no jogo que irão fazer o jogador perder, como por exemplo um espinho, tempo da fase excedido entre outras coisas.

Pronto, agora se o jogador pular em cima do inimigo irá matá-lo do contrário o próprio jogador morre se encostar de outra forma.

Adicionamos músicas para pulo em cima de inimigo e também para final do jogo.

Divirta-se agora adicionando ainda mais inimigos no jogo em lugares estratégicos!

Jogo em ação

Aqui você pode ver o código que implementamos funcionando. Neste link você pode baixar esta versão do jogo:

O que vem por aí?

No próximo post veremos como fazer o jogador subir as escadas.

Até breve!

3 Comments

  1. Que artigo espetacular! Já entrei no seu site algumas vezes, porém nunca tinha deixado um comentário.

    Inseri seu site nos meus favoritos para eu não perder nenhuma atualização.
    Grande abraço!

Leave a Reply

%d