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
» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08

» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43

» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21


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