Conectar-se
Quem está conectado
20 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 20 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 19/03/2008
Número de Mensagens : 267
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuário

Aula 9 – bater em você ate você morrer

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:

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)
avatar
Ranking : Nota A
Notas recebidas : A
Data de inscrição : 11/01/2009
Número de Mensagens : 1339
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 8

Prêmios
   : 1
   :
   :
Ver perfil do usuário

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

em Ter 24 Fev 2009, 20:18
poxa muito bom... Funciona no gm lite?

Cara vc é muito bom pra fazer tutos... Smile
avatar
Data de inscrição : 19/03/2008
Número de Mensagens : 267
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuário

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

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
avatar
Data de inscrição : 01/03/2009
Número de Mensagens : 67
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

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

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
avatar
Data de inscrição : 10/03/2009
Número de Mensagens : 3
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

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

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...
avatar
Data de inscrição : 01/06/2008
Número de Mensagens : 1015
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://supermariobrasileiro.blogspot.com

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

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.
Data de inscrição : 05/10/2009
Número de Mensagens : 199
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://animanga-games.forumeiros.com/

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

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!!!
avatar
Data de inscrição : 01/10/2009
Número de Mensagens : 14
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

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

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
avatar
Data de inscrição : 10/03/2010
Número de Mensagens : 5
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

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
Data de inscrição : 20/09/2012
Número de Mensagens : 15
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

em Sab 22 Set 2012, 11:42
Poh não intendi nada, Fala em qual obj tem que usar o codes.
avatar
Data de inscrição : 10/04/2013
Número de Mensagens : 2
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

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

em Seg 15 Abr 2013, 00:35
as imagens estão corrompidas :\
tem como alguém upar elas?
avatar
Ranking : Nota B
Notas recebidas : D+B+B+C+A
Data de inscrição : 24/08/2009
Número de Mensagens : 1092
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 31

Prêmios
   : 1
   : 1
   :
Ver perfil do usuário

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

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.
Conteúdo patrocinado

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

Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum