[GEN-TPD]#IAJ Aula 03 - Saúde do player e inimigo Top Down
Enviado: Sex Abr 29, 2016 3:34 pm
INTRODUÇÃO A JOGOS
Aula 03 - Saúde do player e inimigo
(Atualizado 08/02/2015)
Depois de termos aprendido fazer a movimentação do player e faze-lo atirar, vamos fazer um sistema de saúde para o player, inimigos simples, itens e níveis. Usaremos os códigos de tiro da engine da aula passada.
Não leia esta aula sem ter olhado as anteriores. Ok?
Antes de começar baixe esta engine:
[GM:S] DOWNLOAD ENGINE
[url=hhttps://redscreensoft.com/Aulas/IAJ/Aula%2003/engine_tiro_td_inimigo.gmk][GM8] DOWNLOAD ENGINE[/url]
Saúde:
Em quase todo jogo existem barras para mostrar a saúde do player, as populares healthbars (barras de saúde).
Para podermos manipula-la usamos uma variável. Quando existe uma unica instância de um objeto (Player) usamos uma variável global. Mas quando existem varias instâncias de um mesmo objeto usamos uma variável local (inimigos).
Para o player que é um só usamos a variável global health que ja é de padrão do GM. Seu valor inicial é setado em 100 quando o jogo começa, mas queremos que toda vez que uma room seja iniciada o health seja 100, então vamos ao objeto controle e colocamos no evento Others-->Room start:
Código: Selecionar todos
//Saúde inicial é 100
health = 100
Agora faremos com que se o player colidir com o inimigo perda vida. Va no objeto player e no evento Collision escolha o objeto inimigo e coloque o seguinte código:
Código: Selecionar todos
//tira -2 de saúde
health -= 2
Vamos ao evento Step do objeto controle agora, para fazermos uma limitação:
Código: Selecionar todos
//não diminui pra menos de zero
if health <= 0{health = 0}
//não passa de 100
if health > 100{health = 100}
Agora faremos o health aumentar coletando um item. Va ao objeto player e no evento Collision escolha o objeto add_saude e coloque o código:
Código: Selecionar todos
//adiciona 25 à saúde
health += 25
Agora vamos ao objeto add_saude e no evento Collision escolhermos o objeto player e colocamos o código:
Código: Selecionar todos
//quando o player coledir com este objeto ele será destruido
instance_destroy()
Código: Selecionar todos
draw_healthbar(100,10,200,20,health,c_black,c_red,c_lime,0,1,0)
//Legenda:
//x1: posição da lateral esquerda da barra
//x2: posição da lateral direita da barra
//y1: posição da linha superior da barra
//y2: posição da linha inferior da barra
//Amount: variável que estamos usando (no caso, health)
//backcol: cor do fundo da barra
//mincol: cor que significa pouca saúde (vermelha)
//maxcol: cor que significa boa saúde (verde)
//direction: direção para onde vai aumentando a saúde (0=direita, 1=esquerda, 2=baixo e 3=cima)
//showback: mostrar fundo da barra (1 significa sim e 0 significa não)
//showborder: mostrar borda da barra (1 significa sim e 0 significa não)
Ja descansou? Agora vamos ao sistema de vidas, que por padrão ja temos a variável lives. E como queremos 3 vidas somente quando o jogo começar va ao evento Others-->Game start e coloque o código:
Código: Selecionar todos
//Começa o jogo com 3 vidas
lives = 3
Código: Selecionar todos
if health <= 0
{
//resetando a room
room_restart()
//enche a saúde novamente
health = 100
//retira uma vida
lives -= 1
}
Código: Selecionar todos
//adiciona mais uma vida
lives += 1
Código: Selecionar todos
//quando o player coledir com este objeto ele será destruido
instance_destroy()
Código: Selecionar todos
draw_text(10, 35, "Vidas: " + string(lives))
//Legenda:
//x: posição x do texto
//y: posição y do texto
//str: texto que deve vir entre apóstrofos, mas queremos adicionar um valor númérico(real), que é uma variavel
//Então adicionamos o sinal de + porque estamos adicionando outro texto, e então fazemos a conversão de número em
//texto dessa maneira string(variavel), senão fizermos essa conversão dará um erro, pois lives(número) iria ser lido com texto
E quando as vidas acabarem? vamos fazer mais uma checagem no Step do controle:
Código: Selecionar todos
if lives == 0
{
//vai para a room game_over
room = game_over
}
Código: Selecionar todos
//reseta o jogo
game_restart()
Agora vamos fazer uma movimentação bem simples para os inimigos. No objeto Inimigo no evento Create coloque:
Código: Selecionar todos
//começará em velocidade vertical 5, ou seja indo para baixo.
vspeed = 5
Código: Selecionar todos
//velocidade vertical será invertida, ou seja vai rebater
vspeed = -vspeed
Código: Selecionar todos
//destrói o objeto
instance_destroy()
fases:
Para passar de fase faremos o seguinte, depois de não ter nenhum inimigo na room passa para a próxima fase. Então no objeto controle adicione este código no Step:
Código: Selecionar todos
//se o número de inimigo for zero
if instance_number(inimigo) == 0
{
//passa para próxima room
room_goto_next()
}
Se não conseguiu seguir a aula baixa a engine completa:
[GM:S] DOWNLOAD ENGINE
[GM8] DOWNLOAD ENGINE
Até a próxima aula!
Próxima aula: saúde do inimigo
FLWS!