Aula 9 – bater em você ate você morrer

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

Aula 9 – bater em você ate você morrer

Mensagem por reddragon em Ter 24 Fev 2009, 16:41

Galera nosso jogo como mo nosso jogo será um jogo RPG o personagem terá de ter um ataque baseado em uma ficha e também leveis e experiência e também faremos uma vida para nosso inimigo.

Mas antes para deixar nosso jogo um pouco mais bonitinho vamos criar nele um tileset e um background. Tileset do inglês peças e background do inglês fundo.

como as imagens são muito grandes eu as coloquei em um zip:

http://www.mediafire.com/download.php?kuuwcw22mon

Carregue eles na pasta Background:

E configure o tileset desta forma.



E pode deixar o background na configuração que veio e o nomeio de bg_montanhas.

Os dois foram emprestados de outro programa que não vem ao caso.

Vamos agora colocar nossos tileset em nossa room, na aba tiles selecione o nosso tileset e apertando em cima dele você ira trocar o desenho selecionado. Agora clicando na room você verá que esta adicionando desenhos na room. Eu montei algo assim:



Se você testar agora verá que ficou bonito, mas o chão ainda aparece seria interessante que ele não aparecesse, então para fazer isso é fácil, vá até o obj_chao e desmarque a opção visible e olhando na room ele não sumira, mas quando rodarmos nosso jogo ele não aparecera mais.

E nosso background deve ser colocado assim no fumdo:



Agora que nosso jogo já esta mais bonito vamos colocar o nosso primeiro recurso RPG o ataque e para isso vamos criar mais 1 obj chame ele de obj_criador_vars ele ira criar nossas vars globais que irmos usar.

Por enquanto iremos criar só o ataque e para isso no obj_criador_vars no evento create coloque um esecute code e nele o seguinte script:

Código:
globalvar atk {atk = 1}

instance_destroy()

Quando creiamos uma var global ela não é criada se atribuindo um valor, para isso temos de fazer de em outro lugar e seria entre { } então o que fazemos é criar nosso var e logo após atribuir um valor a ela.

coloque nosso obj na room e deixeo la em qualquer canto.

E também eu acho que para atacar e retirar vida de nosso inimigo, nosso inimigo terá de ter uma vida então em nosso inimigo vamos colocar o seguinte script no evento create no a baixo de nossas vars:

Código:
//vars rpg
vida = 5

Agora que já temos um ataque e nosso inimigo já tem uma vida vamos o fazer perder sua vida quando atacado para isso modifiquemos o script do evento collision com o obj_player:

Código:
//verifica se o player esta atacando
if obj_player.atacando = true{
//modify as vars
vida -= atk
//verifica se o inimigo tem vida ainda se não ele tem de morrer
if vida <= 0{effect_create_above(ef_explosion,x,y,0,c_red);instance_destroy()}

}

O que foi feito? Foi adicionado um script que desconta da vida o ataque e identifica se a vida é menor ou igual a 0 e se for ele destrói o inimigo. Mas se for testado agora você me dirá: Mas adiantou nada o inimigo continua matando o inimigo em uma pancada só! Ai eu te responderia: Não é bem em uma pancada só.

Na verdade o inimigo demora 5 steps para ser morto em cada step ele é descontado 1 de vida e como nosso ataque demora aproximadamente 12 steps porque ele tem 3 imagens e cada imagem é vista por 4 steps então 4 x 3 = 12 com isso estamos matando nosso inimigo em uma pancada só mesmo.

Agora temos de definir então que ele já apanhou e que ele não pode ser atacado novamente enquanto o ataque não for finalizado para isso vamos criar mais uma var na seção RPG.

Código:
//vars rpg
vida = 5
apanhando = false

E em nosso código a colocamos junto com o que identifica se o player esta atacando para que ela identifique se eu já apanhei porque se já é para eu não apanhar mais:

Código:
//verifica se o player esta atacando e se o inimigo ainda não apanhou
if obj_player.atacando = true and apanhando = false{
//modify as vars
apanhnado = true
vida -= atk
//verifica se o inimigo tem vida ainda se não ele tem de morrer
if vida <= 0{effect_create_above(ef_explosion,x,y,0,c_red);instance_destroy()}

}

Mas nova mente testando você vai me dizer: Mas o inimigo agora não morre mais. Porque após o primeiro ataque a var apanhando é colocada em true e seu valor não retorna para poder apanhar novamente.

Entretanto agora surge um pequeno problema porque se simplesmente fizemos isso:


Código:
//verifica se o player esta atacando e se o inimigo ainda não apanhou
if obj_player.atacando = true and apanhando = false{
//modify as vars
apanhando = true
vida -= atk
//verifica se o inimigo tem vida ainda se não ele tem de morrer
if vida <= 0{effect_create_above(ef_explosion,x,y,0,c_red);instance_destroy()}

}else{apanhando = false}

Ou isso:


Código:
//verifica se o player esta atacando e se o inimigo ainda não apanhou
if obj_player.atacando = true and apanhando = false{
//modify as vars
apanhando = true
vida -= atk
//verifica se o inimigo tem vida ainda se não ele tem de morrer
if vida <= 0{effect_create_above(ef_explosion,x,y,0,c_red);instance_destroy()}

}
//se o player não estiver atacando o inimigo poderá apanhar
if obj_player.atacando = false {apanhando = false}

Existem dois problemas nesses scrits o 1º faria com que o inimigo voltasse a morrer com um golpe só, mas a cada dois ciclos porque no primeiro ele iria descontar a vida e tornara apanhando true e no segundo ele tornaria apanhando false e assim podendo perder vida no próximo step, e no segundo ele ate funcionaria às vezes somente se o player enquanto não estivesse atacando encosta se no inimigo para ele poder executar o código e assim modificar a var. Do contrário se o player não encosta enquanto o player não estivesse atacar e só encostasse enquanto o player estivesse atacando o inimigo não perderia vida.

E nessas horas que é bom dizer: Ahhh e agora quem poderá me ajudar?

Mas eu tenho uma solução para esse problema, pegue o pedaço do 2º script que verifica se o ataque do player é false e recorte ele e o coloque junto ao evento step do inimigo logo a baixo da gravidade e pronto ta feito. Isso fará com que mesmo sem encostar-se ao player a var apanhando volte a ser false ao termino de nosso ataque.

Promessa feita, promessa cumprida, mas agora vamos ao algo mais:

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

Na próxima aula trataremos sobre uma reação de nosso inimigo para o ataque e também leveis para o player.

tutorial feito por RedDragon


Última edição por reddragon em Qua 23 Set 2009, 17:04, editado 7 vez(es)

reddragon

Número de Mensagens : 267
Idade : 27
Data de inscrição : 19/03/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por Dancity em Ter 24 Fev 2009, 20:18

poxa muito bom... Funciona no gm lite?

Cara vc é muito bom pra fazer tutos... Smile

Dancity

Ranking : Nota A
Número de Mensagens : 1339
Data de inscrição : 11/01/2009
Notas recebidas : A
Reputação : 8
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   :
   :

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por reddragon em Ter 24 Fev 2009, 23:18

os comandos de desenhar o sprite e o testo funciona mas os de feito de explosão não

reddragon

Número de Mensagens : 267
Idade : 27
Data de inscrição : 19/03/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por Hitsugaya26 em Sab 07 Mar 2009, 02:04

eu tento alterar o codigo tirando a explosao e so colokando pra ele se destruir e n consigo poderia passar o codigo ai ?A vida tb vc so consegue usar no pro lol! alem diiso vc fará outros tutoriais?

Obrigado

Hitsugaya26

Número de Mensagens : 67
Data de inscrição : 01/03/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por Metal_X em Qua 11 Mar 2009, 04:03

Vlw reddragon pelos tutorias cara! Me ajudou muito!
Soh tem uma coisa, não eh querendo ser chato mas precisa da uma melhorada no portuguesio ehauhaeuhaeuhaeuhaeuahe
Tipo, eu sei que não a muita necessidade pq aki ninguem vai ficar cobrando isso, mas eh que as vezes agente se acostumando tanto a escrever errado, que chega numa hora de fazer uma redação ou um relatoria importante, agente escreve coisa errada ehauheehauhaeuhea
E tb ajuda no entendimento do texto, pq tem algumas partes que nao da entendimento total saca...

Metal_X

Número de Mensagens : 3
Data de inscrição : 10/03/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por CPinheiro em Qua 11 Mar 2009, 06:31

Reddragon, gostei de seu tutorial, até que está bem explicado! Smile Mas acho que poderia reupar as imagens, pois iniciantes se perdem muito fácil sem elas.

Falows, man.

CPinheiro

Número de Mensagens : 1015
Idade : 20
Data de inscrição : 01/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://supermariobrasileiro.blogspot.com

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por TiagoBonadio em Ter 06 Out 2009, 15:41

cara sem as img não da pra saber como fzer no fundo e tal. se desse por favor upar elas de novo!!!

TiagoBonadio

Número de Mensagens : 199
Idade : 20
Data de inscrição : 05/10/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://animanga-games.forumeiros.com/

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por fore em Qua 07 Out 2009, 09:17

pow vc bem que podia fazer uns tutos pra versão lite ai einhh kra
suas aulas são excelentes
pleasee

fore

Número de Mensagens : 14
Idade : 26
Data de inscrição : 01/10/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por Caçador em Ter 16 Mar 2010, 19:09

Tiago, sobre o tileset, vá em Backgrounds -> e 2 cliques no background "tileset". Fazendo isso, ira abrir a janela para edita-lo. Você verá a opção EDIT BACKGROUND mais a esquerda. Abaixo dela há 3 opções. Selecione a 3ª opção e pronto.
Tambem selecione a opção TRANSPARENT pra ñ ficar o fundo azul na imagem.
Eu recomendo aumentar a TILE WIDTH e TILE HEIGHT para 32. Fica mais facil de mexer com os tiles.

Dpois vá na room e vc verá SNAP X:16 Y: 16. Mude para 32. Dpois disso é só fazer oq o Reddragon disse no tutorial! Very Happy

Espero ter ajudado

Caçador

Número de Mensagens : 5
Idade : 25
Data de inscrição : 10/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por Kael1725 em Sab 22 Set 2012, 11:42

Poh não intendi nada, Fala em qual obj tem que usar o codes.

Kael1725

Número de Mensagens : 15
Idade : 26
Data de inscrição : 20/09/2012
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por fernandohs2 em Seg 15 Abr 2013, 00:35

as imagens estão corrompidas :\
tem como alguém upar elas?

fernandohs2

Número de Mensagens : 2
Idade : 23
Data de inscrição : 10/04/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por Thyago em Seg 15 Abr 2013, 00:45

.O tópico tem 4 anos,e o autor faz tempo que não entra no fórum.

Tópico antigo, tópico trancado.

Thyago

Ranking : Nota B
Número de Mensagens : 1092
Idade : 30
Data de inscrição : 24/08/2009
Notas recebidas : D+B+B+C+A
Reputação : 31
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 1
   :

Voltar ao Topo Ir em baixo

Re: Aula 9 – bater em você ate você morrer

Mensagem por Conteúdo patrocinado Hoje à(s) 06:27


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