GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por lovn7 Ontem à(s) 13:33

» É possível fazer istó no game maker
por William Lima Ontem à(s) 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31

» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23

» Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49

» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58

» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36

» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36

» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33

» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51

» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28

» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18

» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08

» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10

» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16

» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40

» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01

» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45

» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34

» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28

» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48

» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54

» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14

» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50


Fazendo um Inventário (Parte 2/3)

Ir para baixo

Fazendo um Inventário (Parte 2/3) Empty Fazendo um Inventário (Parte 2/3)

Mensagem por Zero. Ter 10 Mar 2015, 18:59

→Enfim a parte dois da nossa criação de inventário!
Desculpem-me pela demora mas arrumar tempo nunca é fácil Smile


→Vamos à parte 2 !

Nome : Fazendo um Inventário (Parte 2/3)
Plataforma : GM7 ou superior (Pro).
Dificuldade : Mediano.
Pré-Requisitos : GM7 ou superior e um pouco de noção sobre arrays (mas talvez você entenda arrays com esse tutorial).
Créditos : Zero.

Nós já temos o corpo do inventário, seus slots, os itens, já sabemos como adicionar itens a estes slots agora vamos aprender a usar estes itens!

2.1 – Usando Itens
Para usarmos os itens é muito simples, basta nós clicarmos com o botão direito no item (isto é uma das possibilidade, vai a depender do jogo) e diminuirmos um na quantidade do item clicado e caso a quantidade do item for menor que 1, nós iremos excluí-lo do inventário. Mas como fazer isso?  Siga os passos a seguir.

Em nossos objetos que são parentes do par_item (obj_pot_hp, obj_pot_mp, obj_armadura, obj_espada), nos colocamos o seguinte código no evento Mouse Right Pressed  Event Mouse  :

Código:
global.quant[indice] -= 1 //retira um da quantidade do item
/*Aqui em baixo é onde teremos que por o que nosso item faz.
No caso desta engine existe 2 variaveis no obj_controle, uma chamada global.hp e outra chamada global.mp. Nossa poção de hp irá aumentar 5 de hp e a de mp irá aumentar 5 de mp. Eu para isso eu fiz o seguinte*/
global.hp += 5 // é apenas isto, sem complicações

Mas e agora? Nosso itemtem 1 de quantidade (por exemplo), ao diminuirmos 1, essa quantidade passará a ser 0, era pra ele sumir, como fazemos para excluí-lo? Siga os seguintes passos :
Nos objetos que são parente do par_item adicione o seguinte código a seu evento Step  Event Step  :

Código:
if global.quant[indice] <= 0 // se a minha quantidade (item) for menor ou igual a 0
{
global.slot[indice] =  noone // meu item no slot é igual à nenhum
global.quant[indice] = 0 // minha quantidade é 0 (para evitarmos qualquer tipo de problema)
instance_destroy() // eu sou destruído
}

É assim que funciona nossa exclusão de itens, não basta apenas excluir a instância, porque a instância é apenas a representação do objeto que está na nossa array global.slot[indice]. Para excluirmos nosso item do inventário, temos que excluir a instância e também definir o valor do global.slot do seu indice para noone (noone tem valor de -4 no GameMaker) e  definir o valor de global.quant do seu indice para 0, sendo indice o valor do indice do objeto do inventário atual (o qual estamos trabalhando).

2.2 – Movimentando os itens pelo inventário
A ideia para movimentarmos os itens pelo inventário é bem simples. Ao clicarmos em um item no inventário com o botão esquerdo, nos iremos guardar o valor do indice desse item em uma variavel global, caso essa variavel global não tenha nenhum outro indice guardado (caso haja algum outro indice guardado, ai é executado a troca). Após clicarmos e guardamos o indice desse item em uma variavel global, nos vamos clicar em outro item com o qual nos queremos trocar. Assim que nos clicarmos em outro item (pode ser o mesmo que guardamos o indice, caso queira deixa-lo onde estava mesmo) eu irei trocar o global.slot do indice que guardei com o global.slot do item que eu escolhi para trocar, assim como o seus global.quant's. Ao trocarmos estas, nós devemos trocar as suas instâncias também, assim, nós deletamos as instâncias dos itens que pegamos os indice, e definimos o valor da variavel create nos obj_slot's que tem o mesmo indice desses itens. Ao definirmos a variavel create como 0, o obj_slot irá criar o item novamente, mas agora, irá criar o item que foi trocado, em ambos os slots!
Na pratica, ficaria assim :

Inicialmente no obj_controle, em seu evento Create  Event Create , nos iremos adicionar aquela variavel global :

Código:
global.troca = 0

No obj_slot, nós iremos adicionar o seguinte código ao seu evento Mouse Left Pressed  Event Mouse :

Código:
if global.troca = 0 // se a variavel global ainda não tiver nenhum indice salvo
{
   global.troca = indice // salvamos o indice desse slot nela
   exit; // saímos deste piece of code para que não haja conflito com o código abaixo
}

if global.troca > 0 // se já existe algum indice salvo (aqui iria funcionar, teoricamente, no nosso segundo item que foi clicado, que é com o qual nós queremos trocar
{
   scr_troca() // este é o script de troca que será mostrado a seguir
   global.troca = 0 // define a variavel global.troca para 0, assim confirmando a troca
}

Agora nós criaremos o script scr_troca. Ele é o código principal desta troca :

Código:
var aux_slot, aux_quant; // criação de variáveis temporárias auxiliares para nos ajuderam na troca
aux_slot = global.slot[global.troca] // salvando o valor de global.troca em uma variavel auxiliar para que seu valor não seja perdido, e podermos concluir a troca
aux_quant = global.quant[global.troca] // salvando o valor de global.quant também
global.slot[global.troca] = global.slot[indice] // Fazendo a troca agora. O slot do indice global.troca recebe o slot do indice “indice” que é o indice do slot que clicamos por último
global.quant[global.troca] = global.quant[indice] // trocando sua quant também
global.slot[indice] = aux_slot // agora o slot com o indice desse slot clicado por último está recebendo a variável auxliar a qual guardamos os valores do indice global.troca, se não tivessemos esta variavel auxiliar a troca não aconteceria pois o valor do slot e quant de indice global.troca já foram alterados
global.quant[indice] = aux_quant // quant do indice do ultimo slot clicado recebendo o quant da variavel auxiliar
with par_item // aqui nós vamos entrar em todos os itens que tem como parent o objeto par_item
{
   if indice = other.indice or indice = global.troca // como nós entramos em todos os itens, nos temos que excluir apenas os que estão sendo trocados, para isso há uma checagem de indice para que apenas os itens com os indices utilizados na troca sejam excluídos
   {
       instance_destroy()
   }
}
with obj_slot // agora nós vamos entrar nos obj_slot's para alterarmos o valor da variavel create
{  
   if indice = global.troca // se o indice deste slot é igual ao indice do slot clicado pela primeira vez, então... Isto segue o mesmo raciocínio da checagem feita nos itens
   {
       create = 0 // define a variavel create para 0, para que os itens trocados sejam criados
   }
}
create = 0 // define a variavel create deste slot (o último que foi clicado) para 0, para que ele também crie o item que foi trocado

E pronto! Nosso itens já são trocados!
Os itens são trocados, mas nos nem sentimos que eles são trocados né? Ta feio ainda.
Bom, vamos deixá-lo mais “sentível”.

Adicione esta subimagem ao spr_slot, ela será a subimagem de posição 0 no sprite:
pwaGvryTLQ.png hosted at imgserv.com. the free image hosting service.

Com está nova subimagem, vamos adicionar o seguinte em nosso obj_slot.
Após a parte do código que diz se há item ou não e desenha o slot com item ou sem item (if create = 1 {image_index = 1} eles {image_index = 0}) adicione o seguinte :

Código:
if global.troca = indice {image_index = 2} // se este é o primeiro item que eu escolhi para trocar, ele ficará destacado, com uma subimagem diferente!

Agora nós já sentimos esta troca, mas, para sentirmos ainda mais isto, podemos fazer o seguinte.

Nos objetos que são parent do par_item nós acrescentamos o seguinte em seu evento Draw  Event Draw (antes de qualquer outro código!) :

Código:
if global.troca = indice
{
    draw_sprite(sprite_index,image_index,mouse_x,mouse_y)
}

Agora sim! Está bem mais bonito! Já podemos ver, também, que item estamos trocando com sua sprite desenhada no mouse! Podemos testar nosso projeto e ver uma troca de itens quase completa! Testem seus projetos.

→Este foi a segunda parte do tutorial Como fazer um inventário.
Obrigado por ver este turorial e nos dê um feedback, é sempre bom Very Happy


Engine :
https://www.dropbox.com/s/4xaodww3v3eobee/Invent%C3%A1rio%20pt2.gmz?dl=0

Na parte 3 nós iremos moldar mais esse inventário, divindo quantidade de itens, jogando itens no chão, e fazer o inventário seguir a tela. Além disso mostrarei os tipos de inventário.

Veja aqui a Parte 1 :
Parte 1
Zero.
Zero.

Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios : Fazendo um Inventário (Parte 2/3) Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos