Nesse jogo o jogador terá 3 vidas, vamos representá-las por uma barra de corações da seguinte forma:

para fazer isso o primeiro passo é adicionar uma variável de instância ao Player da seguinte forma:

O nome da variável será hitpoints e receberá um número representando a quantidade de vidas que o jogador tem, nesse caso, 3.
Vamos criar uma nova camada para receber essa barra. Faça da seguinte forma:


Vamos adicionar a barra de vida, você deve garantir que a camada GUI está selecionada, ao clicar no nome dela tudo que for adicionado será nesta camada.
Você precisará adicionar dois objetos do tipo TiledBackground:
heart-sheet1.png
e dê o nome LifebarEmptyItems/heart-sheet0.png
e dê o nome LifebarFilledRedimensione o resultado para apenas três corações aparecerem em cada imagem e sobreponha as duas da seguinte forma:



Agora, se tirarmos uns dos corações vermelhos, a imagem que está por baixo será mostrada.
Precisaremos alterar o bloco que lida com a morte do jogador:

Agora o bloco será executado quando o jogador cair da plataforma ou se tiver um número menor ou igual a zero como hitpoints, você pode estender isso adicionando algo do tipo "quando o jogador cair na lava"
Nesse caso, os hitpoints voltam a ser 3 e por conta disso a barra de vida deve voltar ao tamanho original (cada coração mede 10 pixels de largura e são 3 corações, logo, o conjunto mede 30 pixels)
Você verá mais adiante o motivo de termos de fazer isso.
No seu jogo você pode decidir o que causará a morte do jogador, por exemplo, se o jogador deve morrer ao cair na água, basta adicionar nesse bloco uma outra condição:

Um comportamento que você pode querer colocar no jogo é fazer com que o jogador perca moedas caso morra, para isso precisaremos adicionar o seguinte comando no bloco que acabamos de criar:

Precisamos da função Player.Coins ⬅ max(Player.Coins - 5, 0), max é uma função interna do construct (assim como aquela que usamos para definir o movimento da câmera), essa função recebe dois números e retorna o maior deles, então se escrevêssemos max(5, 20) seria o mesmo de ter escrito 20. Precisamos usar essa função por conta do seguinte problema: imagine que o jogador deve perder cinco moedas quando morre, nesse caso faríamos Player.Coins ⬅ Player.Coins - 5, mas e se o jogador tiver apenas três moedas?
Nesse caso, faríamos Player.Coins ⬅ 3 - 5, isso definiria as moedas como -2, sendo que o correto seriam 0 moedas.
Para resolver isso usamos a função max, um dos números é a quantia de moedas que o jogador tem subtraindo quantas vai perder e o número zero assim:
Se o jogador tiver 20 moedas e perder 5: max((20 - 5), 0), como e o jogador fica com 15 moedas
Se o jogador tiver 1 moeda e perder 5 max((1 - 5), 0), como e o jogador fica com 0 moedas e não com -4
No nosso jogo o jogador terá três vidas, vamos incluir uma vida como um item no jogo.
Crie um novo objeto do tipo Sprite com o nome Life e com uma animação com os arquivos em Items/HearthShine/*

No nosso jogo o personagem irá atirar flechas, existe uma animação dele atirando e a usaremos para definir quando o objeto da flecha deverá ser criado. Usaremos a seguinte lógica:
O jogador apertou o botão de atirar ⮕ A animação de puxar e atirar a flecha deve começar
Quando a animação estiver num frame específico ⮕ Uma flecha deve ser criada e configurada para ir na direção correta
Quando uma flecha for criada ⮕ Espere 4 segundos e então a destrua
Se a fecha atingir uma parede ⮕ [...]
Se a flecha atingir um inimigo ⮕ [...]
Para começar, precisamos fazer algumas configurações no jogador. Precisamos criar um novo ponto no jogador, esse ponto será onde a fecha que ele atirar será criada.
Vá ao editor de pontos, selecione a animação Shoot e crie um novo ponto


Dê o nome desse ponto de Bow

Na imagem, arraste-o até a seguinte posição:

Use a opção de colocar o ponto na mesma posição para toda a animação com a opção Appy to whole animation

O resultado deverá ser o seguinte:

Aproveite para adicionar o comportamento Flash ao Player já que o usaremos quando ele for atingido por algum inimigo:

Agora vamos adicionar dois objetos ao jogo:
Sprite, com o nome Arrow e com a imagem em Items/arrowedited.png
Particles, com o nome HitParticles e com a imagem em Particles/hit.png
Você deverá aplicar quatro comportamentos a flecha:

Você deverá configurá-los da seguinte forma:
Bullet

Physics

Obs.: Pin e Flash não tem propriedades que podem ser alteradas.
O objeto HitParticles deve ser configurado da seguinte forma:

Vamos para a parte da programação:
No nosso caso usaremos a tecla Z do teclado para disparar a fecha. Precisamos também que o jogador não esteja encostando em nenhuma parede já que isso causa alguns problemas.

Nós desativaremos momentaneamente o grupo Player Movement para evitar que a animação do jogador atirando a fecha seja sobrescrita por outra (se o jogador apertar Z e → ao mesmo tempo, a animação de atirar a flecha deve prevalecer).
Vamos ter que fazer uma pequena alteração nesse grupo para permitir que o jogador possa virar para a direita ou para a esquerda enquanto atira.
Estava assim:

Deve ficar assim:

Você deve arrastar esses dois blocos para fora do grupo:

Crie o seguinte bloco para fazer o jogo voltar ao normal quando a animação de tiro acabar

Agora crie este bloco para fazer a fecha aparecer no momento certo da animação

Caso teste o jogo, perceberá que a flecha vai apenas para um lado, para corrigir isso crie:

Vamos definir agora como as flechas irão interagir com o ambiente, você pode escolher entre três opções:
Uma flecha atirada deverá ficar fincada na parede em que bateu


A flecha deverá cair quando bater em uma parede


Você pode remover a propriedade riscada ou usar a opção Toggle disabled



Como o jogo ficará lento caso muitas flechas existam ao mesmo tempo, vamos destruí-las depois de 4 segundos, no último segundo ela começará a piscar indicando que vai sumir:

Configuramos o que deve acontecer caso a fecha bata no cenário, agora vamos configurar o que deve ocorrer quando ela bata num inimigo.
Devemos prender a flecha no inimigo e tirar pontos de vida dele:


Vamos ampliar o bloco que acabamos de fazer para incluir o que deve ocorrer quando um inimigo morrer (visto que ele morre quando uma flecha bate nele)

Nessa adição vamos testar se os Hitpoints são 0, criar 3 moedas e aplicar uma força aleatória para dar um efeito de "explosão".

A função random(a, b) recebe dois números e retorna um número aleatório entre eles, por exemplo, se fizer random(5, 7) a cada chamada será retornado algo como 5.3, 6.9, 7.0 etc.
No caso de suas moedas não terem física, simplesmente não coloque a linha que envolve a explosão.
Já programamos a morte do inimigo pelo jogador, precisamos fazer o inverso agora:
