Para deixar nosso jogo mais completo, ├® hora de adicionar alguns vil├Áes. Isso dar├í um bom elemento de desafio, algo que antes estava faltando.

A ideia ├®: Quando voc├¬ coletar todas as estrelas pela primeira vez, ser├í lan├ºado uma bomba saltitante. A bomba ir├í saltar aleatoriamente pela fase e se voc├¬ colidir com ela, voc├¬ morre. Todas as estrelas ir├úo reaparecer para que voc├¬ as colete de novo, e se voc├¬ o fizer, uma nova bomba ser├í lan├ºada. Isto ir├í dar ao jogador um desafio: conseguir a pontua├º├úo mais alta sem morrer.

A primeira coisa que precisamos ├® um Group para as bombas e alguns Colliders:

bombs = this.physics.add.group();

this.physics.add.collider(bombs, platforms);

this.physics.add.collider(player, bombs, hitBomb, null, this);

As bombar irão quicar nas plataformas, e se o player encostar nelas nós iremos chamar a função hitBomb. Ela irá parar o jogo e pintar o player de vermelho.

function hitBomb (player, bomb)
{
    this.physics.pause();

    player.setTint(0xff0000);

    player.anims.play('turn');

    gameOver = true;
}

At├® agora tudo bem, mas n├│s precisamos soltar as bombas. Para fazer isto modificaremos a fun├º├úo collectStar:

function collectStar (player, star)
{
    star.disableBody(true, true);

    score += 10;
    scoreText.setText('Score: ' + score);

    if (stars.countActive(true) === 0)
    {
        stars.children.iterate(function (child) {

            child.enableBody(true, child.x, 0, true, true);

        });

        var x = (player.x < 400) ? Phaser.Math.Between(400, 800) : Phaser.Math.Between(0, 400);

        var bomb = bombs.create(x, 16, 'bomb');
        bomb.setBounce(1);
        bomb.setCollideWorldBounds(true);
        bomb.setVelocity(Phaser.Math.Between(-200, 200), 20);

    }
}

N├│s utilizamos um m├®todo do Grupo chamado countActive para ver quantas estrelas sobraram vivas. Se n├úo houver nenhuma, ent├úo o jogador coletou todas, com isso n├│s utilizamos a fun├º├úo de iterate para reativar todas as estrelas e resetar suas posi├º├Áes para zero. Isto far├í com que todas as estrelas caiam do topo da tela de novo;

A pr├│xima parte do c├│digo cria a bomba. Primeiro n├│s escolhemos uma coordenada x aleat├│ria, sempre no lado oposto ao player, apenas para dar uma chance a ele. Ent├úo a bomba ├® criada, ela ├® configurada para colidir com o world, quicar e ter uma velocidade aleat├│ria.

O resultado final ├® este pequeno sprite de bomba que salta pela tela. pequena o bastante para ser facilmente evitada, no come├ºo, mas assim que os n├║meros aumentam come├ºa a ficar bem dif├¡cil!

image

E o nosso jogo está feito :)

Conclusão

Voc├¬ agora aprendeu como criar um sprite com propriedades f├¡sicas, controlar seu movimento e torna-lo interativo com outros objetos em um pequeno game world. Existem muitas outras coisas que voc├¬ pode fazer para aperfei├ºoar este jogo. Por que n├úo expandir o tamanho da fase e permitir que a c├ómera role? Talvez adicionar vil├Áes de diferentes tipos, diferentes valores, ou dar ao player uma barra de vida.

Ou para um jogo não violento, você pode torna-lo um speed-run e desafiar o jogador a coletar as estrelas o mais rápido possível.

Com o que você aprendeu neste tutorial, e as centenas de exemplos disponíveis, você deve ter agora uma fundação sólida para futuros projetos. Mas como sempre, se você tiver uma dúvida, precisar de um conselho, ou quer compartilhar o que você estrá trabalhando, então sinta-se a vontade para pedir ajuda no fórum do Phaser.

Facebook Instant Games

Phaser 3 agora tem suporte total para criar Facebook Instant Games. Agora voc├¬ aprendeu como criar um jogo utilizando o Phaser, por qu├¬ n├úo ver como ├® f├ícil converte-lo em um Instant Game no nosso Guia de primeiros passos.