#IAJ Aula 03 - Saúde do player e inimigo Top Down

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

#IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por Alex FC em Dom 03 Jan 2010, 12:59

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:





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:
//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:
//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:
//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:
//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:
//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:
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:
//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:
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:
//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:
//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:
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:
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:
//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:
//começará em velocidade vertical 5, ou seja indo para baixo.
vspeed = 5

Na colisão do inimigo com o bloco coloque:

Código:
//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:
//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:
//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:





Até a próxima aula!

Próxima aula: saúde do inimigo



FLWS!


Última edição por Alex FC em Seg 09 Fev 2015, 19:50, editado 17 vez(es) (Razão : Atualização)

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por SIGILOSO em Dom 03 Jan 2010, 13:50

Ótima aula AlexFC!!
Continue com os seus ótimos trabalhos,ajudando mtos "desesperados"!! XD
Parabéns kara
Very Happy
afro

SIGILOSO

Ranking : Nota A
Número de Mensagens : 2264
Idade : 23
Data de inscrição : 06/06/2009
Notas recebidas : A+A+A+A+A+A+A
Reputação : 39
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 4
   : 2
   : 1

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por Lcastro1997 em Qui 03 Jun 2010, 13:35

mto bom!!!


Cara, ontem deu tudo certo, mais hoje, hora que fui testar deu esse erro:


___________________________________________
ERROR in
action number 1
of Step Event
for object player:

Error in code at line 31:
if keyboard_check_pressed(vk_space) && global.balas>0

at position 48: Unknown variable balas


o que k é?

Cara, eu baixei a engine copleta, coloquei no meu que eu tava fazendo, mais continuo o mesmo erro do meu ultimi post:
ERROR in
action number 1
of Step Event
for object player:

Error in code at line 31:
if keyboard_check_pressed(vk_space) && global.balas>0

at position 48: Unknown variable balas

EDIT por rafasgb: Cuidado para não postar 3 vezes seguidas, isso é triple post! Vou ser obrigado a te dar warn.

Lcastro1997

Número de Mensagens : 22
Idade : 19
Data de inscrição : 31/05/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.dicasparablog.com

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por Kisuk_kun em Qui 14 Jul 2011, 16:46

Cool cara muito bom esse tuto deu tudo certo aki

Kisuk_kun

Número de Mensagens : 40
Idade : 21
Data de inscrição : 13/07/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.kisuk_kun.ucoz.com

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por LCS em Qui 14 Jul 2011, 16:51

Kisuk_kun
Cuidado ao reviver tópicos muito antigos apenas para comentários como este, isso é contra as regras do fórum.
Alertado

LCS

Ranking : Nota A
Número de Mensagens : 1035
Idade : 21
Data de inscrição : 09/03/2010
Notas recebidas : A
Reputação : 43
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://www.www.ww.www

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por thelack em Sex 13 Jan 2012, 20:50

o dowload não funcioa o que faço tem como faze sem fazer download

thelack

Número de Mensagens : 6
Data de inscrição : 11/01/2012
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por heroidahora em Sab 16 Jun 2012, 12:59

cara to com um problema e nao consigo resolver. Quando inicio o jogo nao aparece a barra de saude e nem o numero de life. O objControlador esta na roon. pode me ajudar?

heroidahora

Número de Mensagens : 1
Data de inscrição : 13/06/2012
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por Alex FC em Sab 20 Out 2012, 22:46

Aula atualizada - 20/10/12:

- Melhora na grafia e explicação;
- Atualização das engines.

Ps: As próximas aulas serão atualizadas em breve.

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por skatemilx em Ter 27 Nov 2012, 18:06

To com um problema.
Quanto eu coloco o código da barra de lives aparece na room mas quando eu vejo o objeto que há o código de barra desaparece!!!

skatemilx

Número de Mensagens : 7
Data de inscrição : 27/11/2012
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por Alex FC em Ter 27 Nov 2012, 19:05

Veja que você deve colocar o código no objeto controle, esse objeto só servirá para desenhar coisas na tela. Ele deve estar em todas as fases e ele é invisivel mesmo.

Se colocou esse código no se player, certamente ele vai desaparecer. Pois, estara usando o evento Draw. Assim sua sprite some, e só reaparece se você redesenha-la no evento Draw.

Por isso pedi para que crie um objeto controle. Um objeto que não aparece, mas desenha suas vidas, pontuação e etc.

Espero ter esclarecido Very Happy.

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por BrunoMotaSantos em Dom 29 Set 2013, 11:02

Cara,como colocar a barra de vida na posição que desejar?

BrunoMotaSantos

Número de Mensagens : 21
Idade : 15
Data de inscrição : 28/09/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por Alex FC em Dom 29 Set 2013, 11:16

Olhe o código de desenhar a barra. Os quatro primeiros argumentos formam a barra:

Eu escreveu: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:
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.
Só modificar os 4 primeiros argumentos ao teu gosto.

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por BrunoMotaSantos em Dom 29 Set 2013, 11:45

Mais cara,fiz isso mais não está mudando a posição e sim o tamanho!

BrunoMotaSantos

Número de Mensagens : 21
Idade : 15
Data de inscrição : 28/09/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por Alex FC em Dom 29 Set 2013, 12:23

São quatro posições caro BrunoMotaSantos. Elas determinam o tamanho também. Veja a imagem a seguir e compreenda:



Repare que tu determina a posição das laterais da barra.

Espero que tenha ajudado. Happy

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por BrunoMotaSantos em Dom 29 Set 2013, 12:41

Bom cara,infelizmente não estou entendendo mesmo!


Eu queria colocar a barra no canto inferior direito,mais não estou conseguindo..Como eu faço?

BrunoMotaSantos

Número de Mensagens : 21
Idade : 15
Data de inscrição : 28/09/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por Alex FC em Dom 29 Set 2013, 12:54

o.O

Ok, vamos checar algumas coisas:

- Coloque o código no evento Draw.
- Certifique-se de que este objeto esteja na room.
- Tente com esse código:

Código:
draw_healthbar(32,32,128,64,health,c_black,c_red,c_lime,0,1,0);
Caso não dê certo, sugiro que faça a engine da aula para entender. Ou retome as aulas do começo, pois você está com dificuldade para entender e diferenciar posições.

Valeu?

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por BrunoMotaSantos em Dom 29 Set 2013, 13:03

Ok cara,não funcionou muito bem,mais obrigado pela atenção e vou retomar as aulas!

BrunoMotaSantos

Número de Mensagens : 21
Idade : 15
Data de inscrição : 28/09/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por Willy em Dom 29 Set 2013, 13:03

Código:
draw_healthbar(100,10,200,20,[...]
Como Alex disse, esses 4 primeiros argumentos são as coordenadas em que a barra deve ser montada. Além da posição, ela também é interferida no tamanho.
Por exemplo, se x1 vale 100, e x2 vale 200, a largura deste draw será 100, pois estamos montando desde da posição 100 até a posição 200. Em outras palavras, a distancia da posição x1 até a x2 é 100, pois x2-x1 (200-100) vale 100.
Mesma coisa para o eixo y, que nesse caso, tem altura 10 (y2 - y1, 20 - 10).

Agora, como tu quer que fique no canto inferior direito da tela, você terá que ajustar ate chegara posição que você quer, por exemplo:
Código:
draw_healthbar(520,400,620,420,health,c_black,c_red,c_lime,0,1,0);

___________


Engines, tutoriais e projetos? Clique no banner!



Atenção:
Comporte-se, senão você vai levar a cintada do Willy no meio da bunda! bravo


Willy

Ranking : Nota A
Número de Mensagens : 1812
Idade : 23
Data de inscrição : 08/06/2009
Notas recebidas : C + B + A + A
Reputação : 245
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Re: #IAJ Aula 03 - Saúde do player e inimigo Top Down

Mensagem por Conteúdo patrocinado Hoje à(s) 00:49


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum