segunda-feira, 23 de janeiro de 2017

Criando seu primeiro jogo parte 6

Variáveis de instância

Variáveis de instância permitem que cada monstro guarde seu próprio valor de vida. Uma variável simplesmente é um valor que pode mudar (ou variar), e eles são armazenados separadamente para cada instância, daí o nome variáveis de instância.

Vamos adicionar uma instância chamada health (vida) para nosso monstro. Clique no monstro pela barra de projeto ou barra de objetos. Alternativamente, você pode voltar ao layout e selecionar o objeto Monster. Isso irá exibir as propriedades do monstro na barra de propriedades. Clique em Add/edit perto do Edit variables para editar variáveis.
Adicionando uma nova variável de instância
O diálogo de variáveis de instância será exibido. Ele é similar ao diálogo de comportamentos que vimos anteriormente, mas permite que você adicione ou altere as varíaveis de instância para o objeto. Clique no botão verde Add para adicionar uma nova.

Adicionando a varíavel de instância 'health'.
No diálogo que abrir digite health para o nome, deixe o campo Type (tipo) como Number (número) e para o campo Initial value (valor inicial) digite 5 (como demonstrado). Assim cada monstro começará com 5 de vida. Quando eles forem atingidos subtraímos 1 da vida dele (da variável health) e quando for zero vamos destruir o objeto.
Uma vez que você fez os procedimentos clique em OK. Note que a variável agora aparece no diálodo de variáveis de instância (instance variables) e também aparece nas propriedades dos monstros. (Você pode rapidamente mudar o valor inicial da variável na barra de propriedades mas para adicionar ou remover as variáveis você terá de clicar no link Add / Edit).
A variável vida adicionada ao monstro.

Alterando os eventos

Volte para a folha de eventos. Neste momento, estamos destruindo os monstros assim que o projétil atinge eles. Vamos mudar para subtrair 1 de suas vidas.
Localize o evento que diz: Bullet - on collision with Monster (Bala - em colisão com Monstro). Note que nós colocamos uma ação "destroy monster" (destruir monstro). Vamos substituir isso com "subtrai 1 da vida". Clique com o botão direito na ação "destroy monster" e clique Replace (trocar).
Trocando uma ação.
O mesmo diálogo aparecerá como se estivéssemos inserindo uma nova ação, mas dessa vez ele substituirá a ação que selecionamos. Escolha Monster - > Subtract from (Monstro - Subtrair de) (na categoria de Instance variables) -> variável de instância "health" e insira 1 para o Valor. Clique em Done (feito). A ação deve estar assim:
Subtraindo 1 da vida do monstro.
Agora quando atiramos nos monstros eles perdem 1 de vida e a bala explode, mas nós não fizemos o evento para matar os monstros quando a vida atingir o valor 0. Adicione outro evento:
Condição: Monster -> Compare instance variable (compara variável de instância) -> Health, Less or equal, 0 (menor ou igual a 0)
Ação: Monster -> Spawn another object -> Explosion, layer 1
Ação: Monster -> Destroy
Evento completo.
Por que "menor ou igual a 0" ao invés de "igual a 0"? Vamos supor que nós criamos uma arma mais poderosa que subtraia 2 da vida. Quando você atirar no monstro sua vida deve decrescer 531,-1,-3... note que em nenhum momento sua vida seria exatamente igual a zero, e aí ele nunca vai morrer! Portanto, é uma boa prática usar "menor ou igual" para testar se a vida dele se esgotou.
Execute o jogo. Agora você tem de atingir os monstros cinco vezes para matá-los!

Guardando o placar

Vamos ter um placar para que o jogador saiba se foi bem ou não. Vamos precisar de outra variável para isso. Você deve pensar "vamos colocar a pontuação como uma variável de instância do objeto Player". Inicialmente não é uma má idéia, mas lembre-se que o valor é armazenado "dentro" do objeto. Se não houver instâncias, não haverá variáveis também! Dessa forma se destruírmos o jogador não poderemos mais dizer qual a pontuação que ele tinha porque a variável foi destruída com o jogador.
Por outro lado nós podemos usar uma global variable (variável global). Da mesma forma que uma variável de instância, uma variável global (ou apenas "global") pode armazenar textos ou números. Cada variável pode guardar um único número ou um único trecho de texto. Variáveis globais também podem estar disponíveis para todo o jogo através de todos os layouts - conveniente se fôssemos adicionar outros níveis (levels).
Clique com o botão direito na parte de baixo da folha de eventos e selecione Add global variable (adicionar variável global).
Adicionando uma variável global.
Digite Score (placar) para o nome. Os outros valores padrão para os campos estão OK, ele criará a variável como número (Number) começando com valor 0.
Adicionando o placar global.
Agora a variável global aparece como uma linha na folha de eventos. Está dentro da folha folha de eventos, mas pode ser acessada por qualquer folha de eventos de qualquer layout.
A variável global de placar.
Nota: também existem as variáveis locais (local variables) que podem ser acessadas por uma menor quantidade de eventos, mas a gente não precisa se preocupar com isso agora.
Vamos fornecer ao jogador um ponto para matar os monstros. No nosso evento "Monster: health less or equal 0" (quando um monstro morre), clique em Add action (adicionar ação) e selecione System -> Add to (somar) (dentro de Global & Local Variables) -> Score, valor 1. Agora o evento deve se parecer com isso:

O evento fornecendo o placar ao jogador.
Agora o jogador tem um placar que aumenta em 1 pra cada monstro que ele matar - mas ainda não dá pra ver o placar! Vamos exibí-lo através de um objeto Text (texto).

Nenhum comentário :