domingo, 18 de setembro de 2011

Criando barra de vida


Vamos montar duas coisas a primeira será uma barra de vida para nosso inimigo e a segunda será um número que surgira em cima do inimigo quando atacado equivalente ao valor de seu ataque.

Bom já existe bastante tutorial no cite ensinando a criar uma barra de vida, mas eu irei montar o meu também.

O código será o seguinte:

draw_healthbar(x1,y1,x2,y2, var da vida, cor fundo, cor vazio, cor cheia, direção, fundo, borda)


x1,y1,x2,y2 = as coordenadas de onde ira aparecer sua barra de vida x1 y1 é o começo canto esquerdo superior da barra e o x2 y2 é o fim canto direito inferior.

Var da vida = a var que carrega o valor da vida de seu inimigo no casso desta aula a var vida

Cor fundo = a com do fundo e da borda.

Cor vazia = cor que vai ficar quando vazia

Cor cheia = cor quando estiver cheia

Obs.: a barra não fica com a cor de cor vazia, mas sim quando cheia ela fica 100% com a com de cheia e vai trocando com a cor vazia quanto menor ela for.

Direção = que a barra vai diminuir 0 e da direta para esquerda.

Fundo = se 0 ou false o fundo não aparece e se 1 ou [color:657a=#color]true o fundo aparecera.

Borda = se 0 ou false a borda não aparece e se 1 ou true a borda aparecera.

Agora vamos criar um evento o draw do inglês desenho, é o evento onde que coloca os sprites na tela e também onde podemos escrever as coisas. Mas o criemos no botão add evente / Draw e nele coloque um execute code e colocaremos o seguinte script:

CÓDIGO:
//desenha a barra de vida
draw_healthbar(x - 20,y - 35,x + 20,y - 30,vida,c_black,c_red,c_green,0,true,true)


Partindo do ponto x y do obj fizemos uma barra que terá 40 de largura e 5 de altura no eixo x ele vai de – 20 a + 20 dado 40 de largura e no eixo y vai de – 35 a – 30 dado 5 de altura, colocamos a var vida para ser a vida, e o fundo é preto, a com vai de verde cheia ate vermelha vazia, ela esvazia de direta para esquerda e aparece fundo e borda.

Testando agora você ficara desesperado, e me perguntara: Cadê o desenho do inimigo, e a barra de vida está sempre quase no fim?

O desenho do inimigo some porque até agora não tínhamos colocado o evento draw, quando não existe um evento draw no obj ele mostra o sprite colocado nele sem precisar de script para isso, mas com o evento draw você é obrigado a colocar um script para mostrar o desenho também e o script é esse:

draw_sprite(sprite,imagem,x,y)


Sprite = o sprite que deve aparecer.

Imagem = é a sub imagem do sprite criado se ele tiver mais de uma imagem.

X,Y = a coordenada que a imagem ira aparecer.

Bom agora é só colocar logo a baixo do script da barra de vida o seguinte script:

CÓDIGO:
//desenha a imagem do inimigo
draw_sprite(sprite_index,image_index,x,y)


Colocamos o desenho que esta selecionado no sprite e também a sub imagem que o obj esta selecionado e também bem nas coordenadas do obj.

Agora testando vera que voltou a imagem do inimigo. Happy

Mas a barra ainda esta pequena, por quê?

Simples o script que gera a barra de vida aceita um valor de 0 a 100 e pra adequarmos o valor da vida do inimigo com o qual é mostrado na barra devemos fazer uma conta a regra de 3.

E como fazer ela no GM?

Em minha aula 5 eu fiz uma regra de 3 mas não em GML mas agora vamos.

Pense assim:



Em GML:

resultado = vida * 100 / 5


Resultado é a var que ira armazenar a vida na outra proporção, vida é a vida atual, 100 porque é a outra proporção que queremos deixar, e 5 porque é o máximo de vida.

Agora no evento create adicione mais uma var as vars RPG:

CÓDIGO:
barra_vida = 0


No step logo a baixo da gravidade e do script de identificação de ataque do player coloque o seguinte comando:

CÓDIGO:
Barra_vida = vida * 100 / 5


E no evento draw substitua a var vida pela var barra_vida. Pronto agora a barra de vida esta certa.

Agora o dano aparecendo.

Primeiro crie um novo obj e o chame de obj_dano e adicione a ele quatro eventos um create, um alarm0, um setp e um draw:

No create:

CÓDIGO:
dano = 0 //mostrara o dano tomado
pnc = false //precisaremos dele para o script de gravidade
vspeed = -5 //para ele começar já pulando
hspeed = 0.75 //para ter um movimento na horizontal
alarm[0] = 30 //tepo até o numero sumir


No alarm0:

CÓDIGO:
instance_destroy()


No evento step:

CÓDIGO:
gravidade(obj_dano,0.25,pnc)


E no draw:

CÓDIGO:
draw_text_color(x,y,string(dano),c_white,c_white,c_white,c_white,0.8)


X,Y = coordenadas

String(dano) = string transforma um valor em uma palavra para que possa se escrita, no caso o valor da var dano.

c_white,c_white,c_white,c_white = é a cor da nossa palavra que queremos escrever. E porque 4 c_white? Porque a palavra quando gerada no Gm tem 4 quinas e você pode alterar a cor em cada quina separadamente.

0.8 e para dar uma pequena transparência.

Agora está pronto, nosso obj_dano, mas agora faremos aparecer quando o inimigo apanha, então voltemos ao script do obj inimigo no evento de collision com o obj player e acrescenta esse script logo a baixo do modificando as var:

CÓDIGO:
//criando o dano
dano = instance_create(x,y,obj_dano);
dano.dano = atk


A var dano armazena a id do novo obj que esta sendo criado e em seguida ele transforma a var dano que esta no obj criado no valor do atk do player porque foi o dano que o inimigo recebeu.

Testando você verá que agora o nosso jogo ficou bem mais interessante com uma vida e dano para nosso inimigo.

E aqui temos uma demo para baixar plelo midia file

Um comentário: