Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

[GEN-TPD]#IAJ Aula 03 - Saúde do player e inimigo Top Down

Tutoriais, videoaulas, guias e downloads para te ajudar nos estudos.
Avatar do usuário
All-x
Administrador
Administrador
Reações: 8
Mensagens: 620
Localização: Dourados-MS

Contato:

[GEN-TPD]#IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por All-x » 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
Assim toda vez que a room reiniciar ou começar, a saúde do player será 100. Lembrando que o objeto controle deve estar em todas as roons em que o player esta pois ele vai controlar a pontuação, eventos de desenhos e etc.

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 
Assim enquanto o player estiver colidindo com o inimigo serão tirados -2 do health. E quando o health acabar? Ele continuará em números negativos se não fizermos uma limitação.
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}
Assim o health é limitado entre 0 e 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 
Como o visto o health aumenta +25 e mesmo que passe de 100 ele retornará a 100 porque fizemos uma limitação.

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()
Pronto, agora vamos pintar essa barra na tela do jogo. Vamos ao evento Draw do objeto controle e la adicionar o código:

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)
Uffa! Terminamos a parte mais importante do player. Mas ainda falta muito, quer tomar uma água? vai la! Isso vai demorar um pouco mais.

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
Agora temos que pensar em que momento o player vai morrer. Certamente quando a saúde dele ser zero, então voltemos à aquela verificação que fizemos no Step do objeto controle e mudamos o código que verifica se é menor que zero pra este:

Código: Selecionar todos

if health <= 0
{   
    //resetando a room
    room_restart()
    
    //enche a saúde novamente
    health = 100
    
    //retira uma vida
    lives -= 1
}
E para aumentar o número de vidas vamos ao objeto player no evento Collision e selecionamos o objeto add_vida e colocamos o seguinte código:

Código: Selecionar todos

//adiciona mais uma vida
lives += 1
Depois no objeto add_vida vamos no evento Collsion e selecionamos o objeto player e colocamos o código:

Código: Selecionar todos

//quando o player coledir com este objeto ele será destruido 
instance_destroy()
Agora para vermos o número de vidas vamos ao objeto controle e no evento Draw adicionamos o seguinte código:

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
Game over:

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
    
}
Depois va no obj_game_over e adicione o seguinte código no evento Key_pressed--> Enter:

Código: Selecionar todos

//reseta o jogo
game_restart() 
Inimigo:

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
Na colisão do inimigo com o bloco coloque:

Código: Selecionar todos

//velocidade vertical será invertida, ou seja vai rebater 
vspeed = -vspeed
Agora para o inimigo ser destruido quando levar um tiro, va no evento de colisão do inimigo com a bala e da bala com o inimigo coloque:

Código: Selecionar todos

//destrói o objeto
instance_destroy()
Coloque este código na colisão do bala com o bloco também.

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()
} 
Enfim terminamos essa aula. Espero ter ensinado bem e que vocês tenham entendido XD. Fico devendo a saúde do inimigo para a próxima aula. Vlw? E também eu tive que resumir bem esta aula para não ficar muito extensa e chata, por isso qualquer dúvida sobre esta aula, pergunte. Ok?

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!
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes