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
» 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

» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Qui 18 Abr 2024, 18:28

» 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

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

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

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39


Criando um inventário

4 participantes

Ir para baixo

Criando um inventário Empty Criando um inventário

Mensagem por Markituh Qua 07 Abr 2010, 11:50

Nome: Criando um inventário
Descrição: Tutorial mostrando passo a passo de como criar um inventário.
Nível de dificuldade: Médio/Avançado
Requerimentos: O criador do tutorial(que não sou eu) testou no GM 5 e 6,mais creio que irá funcionar em outros Game Makers,já que alguns(ou todos) dos códigos utilizados neste tutorial você pode encontrar no GM 7,GM 8 e afins.
Desenvolvimento:

OBS: O tutorial a seguir não foi obra minha,eu traduzi deste site e vim postar aqui para a galera.

Introdução

Este tutorial foi criado para Game Maker 5 e 6 e assume um conhecimento básico de GML. Para este tutorial,o modo avançado precisa estar ativado. Por favor, note que existem muitos métodos de criação de um inventário e que este é apenas um método e que muito provavelmente será melhor e mais rapido do que os outros métodos disponíveis. Eu tentei fazer um tutorial tão amigável quanto possível. Sempre que há diferenças no código entre Game Maker 5 e Game Maker 6 eu coloco os dois códigos. Todos os outros códigos devem ser compatíveis com as duas versões.

Nota: Este script usa o inventário como uma variável e, portanto, não vai funcionar se você tem um objeto, sala, sprite ou qualquer outra coisa também chamado de inventário.

Como começar

Primeiro você deve pensar em si o que você quer ter no inventário. Os itens que devem estar nele. Para o tutorial eu vou usar os seguintes itens:


  • vidas
  • espada
  • espada larga
  • arco
  • dinheiro

Temos agora de decidir quantos de cada item que você pode ter e com quantos você começa no jogo.


  • vidas(Max. 10,começa com 3)
  • espada (Max. 1,começa com 1)
  • espada larga (Max. 1,começa sem)
  • arco (Max. 1,começa sem)
  • dinheiro (sem Max. assim que adicionar um máximo de digamos: 999999,começa com 10)

Para o inventário vou usar uma sala em que todos os itens são apresentados como sprites com um número no canto mostrando quais os itens que você tem. Para este inventário vou usar um array para armazenar todos os dados dentro. Nós devemos primeiro decidir quais os dados que vão ter. No nosso caso vamos armazenar os seguintes dados:


  • Nome do item
  • Descrição do item
  • Sprite do item
  • Quantidade máxima do item
  • Quantidade atual do item

Para armazenar esses dados, vou usar um array 2D. Cada item receberá um número. Dentro de um array 2D, agora você pode armazenar para cada item várias coisas. Todas essas informações devem ser declaradas no início do jogo. Isto irá como:
Código:
global.inventory[0,0]:='Vidas'; //Nome do item
global.inventory[0,1]:='Esta é a quantidade de vidas você tem.'; //Decrição do item
global.inventory[0,2]:=sprite_vidas; //A sprite do item
global.inventory[0,3]:=10; //O valor máximo do item
global.inventory[0,4]:=3; //O valor inicial do item
global.inventory[0,5]:='' //O código que será executado quando o item for selecionado
Agora você declarou o item de vida em seu inventário. Por favor note que todas as informações são armazenadas em uma variável global para que cada objeto possa ler os dados a qualquer momento. No meu caso, deu a cada pedaço de informação numero próprio. Por exemplo, o sprite recebeu o número 2. Também o item das vidas recebeu o número 0. Se você quer agora declarar o item espada você vai ter que alterar o 0 depois de "global.inventory[" para um novo número. Você pode chamar a espada, por exemplo, de 1. Em seguida, declare a espada:
Código:
global.inventory[1,0]:="Espada"; //Nome do item
global.inventory[1,1]:="Uma espada simples e barata; //Descrição do item
global.inventory[1,2]:=sprite_sword_basic; //Sprite do item
global.inventory[1,3]:=1; //O valor máximo do item
global.inventory[1,4]:=1; //O valor inicial do item
global.inventory[1,5]:="global.weapon:="sword";" //O código que será executado quando o item for selecionado
Agora você pode utilizar o mesmo código para todos os outros itens também. Você começa então um longo script em que cada especificação é declarada para cada item. Coloque este script no evento Game Start. O último item na lista de declarações é o código para executar quando o item é selecionado. Você pode executar um script em que o tempo ou mudar uma variável. Este tutorial não descreve como fazer isso.

Desenhando o inventário

Agora você precisa desenhar o sistema de inventário. Neste tutorial vou explicar como fazê-lo em uma room especial para o inventário, onde tudo é armazenado. Para desenhar o inventário por um objeto especial que é usado apenas quando é colocado na mesma room. Para fazer o inventário de uma boa vista eu vou ter as seguintes dimensões:

  • Todas as sprites dos itens são de 100x100
  • A room é de 640x480

Como temos 5 itens para exibir cada 100 de largura que exige uma largura de pelo menos 100 * 5 = 500 pixels. Como a sala é de 640 de largura, podemos colocar o inventário completo em uma linha e tirar o resto da tela para a descrição dos itens. Se temos 5 itens temos 6 espaços vazios entre os itens. Assim, temos 6 pontos de largura (640-500) / 6 = 23.3 pixels de largura.

Criando um inventário Inventory_tutorial_screen1

Agora vamos começar com o código de desenho. Precisamos chamar a itens um por um na tela. Nós temos cinco itens. Então, primeiro precisamos ter um laço que atrai os sprites de todos os objetos (É claro que o código de desenho vai no evento de desenho):
Game Maker 5
Código:
for(i:=0; i<=4; i+=1)
  {
  draw_sprite(global.inventory[i,2],-1,23.3+i*(100+23.3),23.3);
  }
Game Maker 6
Código:
for(i:=0; i<=4; i+=1)
  {
  draw_sprite(global.inventory[i,2],-1,23.3+i*(100+23.3),23.3);
  }
(Não notei nada de diferente nesses códigos Shocked)

Este código irá chamar as cinco imagens na tela de inventário na linha de cima como mostra a imagem. No entanto, você apenas deseja que o item seja exibido se estiver em sua posse. Então você precisa usar (É claro que o código de desenho vai no evento de desenho):
Game Maker 5
Código:
brush_style:=bs_solid;
brush_color:=c_white;
pen_size:=2;
pen_color:=c_black;
for(i:=0; i<=4; i+=1)
  {
  if global.inventory[i,4]>0 then
    {
    draw_sprite(global.inventory[i,2],-1,23.3+i*(100+23.3),23.3);
    }
  else
    {
    draw_rectangle(23.3+i*(100+23.3),23.3,23.3+i*(100+23.3)+100,123.3);
    }
  }
Game Maker 6
Código:

draw_set_font(fnt_your_font); //font to use
draw_set_color(c_black);
for(i:=0; i<=4; i+=1)
  {
  if global.inventory[i,4]>0 then
    {
    draw_sprite(global.inventory[i,2],-1,23.3+i*(100+23.3),23.3);
    }
  else
    {
    draw_rectangle(23.3+i*(100+23.3),23.3,23.3+i*(100+23.3)+100,123.3,false);
    }
  }
(Nesses aí eu notei :S)

Se o item não está no seu código isso vai desenhar um quadrado branco nas coordenadas em que o sprite deve ser desenhado. Uma outra coisa que você gostaria de ter é que o número de itens que você tem do objeto é exibida com a imagem. Você, todavia, só quer que, com itens que você pode ter mais de um. Portanto, use o código (É claro o código de desenho vai no evento de desenho):
Game Maker 5
Código:
brush_style:=bs_solid;
brush_color:=c_white;
pen_size:=2;
pen_color:=c_black;
font_align:=fa_right;
font_size:=12;
font_color:=c_yellow;
for(i:=0; i<=4; i+=1)
  {
  if global.inventory[i,4]>0 then
    {
    draw_sprite( global.inventory[i,2] , -1 , 23.3 + i*(100+23.3) , 23.3);
    if global.inventory[i,3]>1 then
      {
      draw_text(23.3 + i*(100+23.3) + 97 , 100 , global.inventory[i,4]);
      }
    }
  else
    {
    draw_rectangle(23.3+i*(100+23.3),23.3,23.3+i*(100+23.3)+100,123.3);
    }
  }
Game Maker 6
Código:
draw_set_font(fnt_your_font);
draw_set_halign(fa_right);
for(i:=0; i<=4; i+=1)
  {
  if global.inventory[i,4]>0 then
    {
    draw_sprite( global.inventory[i,2] , -1,23.3 + i*(100+23.3) , 23.3);
    if global.inventory[i,3]>1 then
      {
      draw_set_color(c_yellow);
      draw_text(23.3 + i*(100+23.3) + 97 , 100 , global.inventory[i,4]);
      }
    }
  else
    {
    draw_set_color(c_black);
    draw_rectangle(23.3 + i*(100+23.3) , 23.3 , 23.3 + i*(100+23.3) + 100 , 123.3,false);
    }
  }
Agora, com o botão direito do número está sendo exibido o número de itens que você tem. Agora vem a parte mais difícil de tudo. Você precisa fazer com que quando você move o mouse sobre a imagem ele exibe a descrição dos objetos e clicando sobre ele irá executar o código fornecido. Para isso, você pode usar o seguinte código (Desde que este código desenhe o significado do objeto que está pairando sobre ele, você deve colocar esse código no evento de desenho também):
Game Maker 5
Código:
//se o mouse está acontecendo na altura verticar correta
if mouse_y>23.3 and mouse_y<123.3 then
  {
  //Checar cada item separadamente
  for(i:=0; i<=4; i+=1)
    {
    //Se o mouse está na coordenada x correta
    if mouse_x > (23.3 + i*123.3) and mouse_x < (123.3 + i*123.3) then
      {
      //set the font and draw the description
      font_size:=14;
      font_align:=fa_center;
      font_color:=c_white;
      draw_text_ext(320 , 140 , global.inventory[i,1] , -1 , 630);
      //if you click on the item
      if mouse_button=mb_left then
        {
        execute_string( global.inventory[i,5]);
        }
      }
    }
  }
Game Maker 6
Código:
//se o mouse está acontecendo na altura verticar correta
if mouse_y>23.3 and mouse_y<123.3 then
  {
  //Checar cada item separadamente
  for(i:=0; i<=4; i+=1)
    {
    //Se o mouse está na coordenada x correta
    if mouse_x > (23.3+i*123.3) and mouse_x < (123.3+i*123.3) then
      {
      draw_set_font(fnt_your_font);
      draw_set_halign(fa_center);
      draw_set_color(c_white);
      draw_text_ext(320 , 140 , global.inventory[i,1] , -1 , 630);
      //if you click on the item
      if mouse_button=mb_left then
        {
        execute_string( global.inventory[i,5]);
        }
      }
    }
  }
Agora a única coisa que ainda precisamos fazer é criar a possibilidade de obter mais itens. Para isso, você pode usar o script:
Código:
//argument0 é o item que você quer adicionar
//argument1 é a quantidade que você quer adicionar
global.inventory[argument0,4]+=argument1;
if global.inventory[argument0,4]>global.inventory[argument0,3] then
  {
  global.inventory[argument0,4]:=global.inventory[argument0,3];
  }
Basta adicionar esse script para o seu jogo como um script. Vamos assumir a você que chame-o de add_item. Então, quando você quer adicionar 10 moedas de ouro e lhe deu o item ouro o número 4, use:
Código:
add_item(4,10);
Isto irá adicionar 10 itens do tipo 4(Dinheiro) para o inventário, a menos que você tenha atingido o número máximo de itens.

Outro exemplo:

Se você perder uma vida use o seguinte código:
Código:
if global.inventory[0,4]>1 then
  {
  global.inventory[0,4]-=1;
  room_restart();
  }
else
  {
  highscore_show(score);
  game_restart();
  }
Este código terá um viver a sua total e se ela cair abaixo de 0 ele irá mostrar o score e reinicia o jogo. Senão só vai reiniciar o espaço atual.



Criei um GMD muito básico e GM6 para mostrar como usar esse código, pegue-o aqui(Download do tutorial). Se você quiser usar múltiplas linhas de itens basta colar o código duas vezes e substituir todos os comandos com a coordenada y, com o novo.

Este tutorial foi criado originalmente por:

Simon Donkers.

Bom desenvolvimento a todos,até!
Markituh
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : Criando um inventário Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 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

Criando um inventário Empty Re: Criando um inventário

Mensagem por jpaulo Qui 17 Jun 2010, 18:01

legal,mas voce podia mostrar os resultados,na minha opniao.
jpaulo
jpaulo

Data de inscrição : 21/03/2010
Reputação : 0
Número de Mensagens : 345
Prêmios : Criando um inventário Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 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

Criando um inventário Empty Re: Criando um inventário

Mensagem por Thiago_o_programador Qui 17 Jun 2010, 18:10

Nossa ta otimo, mas você bem que poderia postar uma engine.
______________________________________________________________
na minha opiniao.
Não entendi, na sua opinião o q?
Thiago_o_programador
Thiago_o_programador

Games Ranking : Nota D

Notas recebidas : D - C - D - C
Data de inscrição : 14/05/2009
Reputação : 7
Número de Mensagens : 713
Prêmios : Criando um inventário Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 1

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

Ir para o topo Ir para baixo

Criando um inventário Empty Re: Criando um inventário

Mensagem por jpaulo Sex 18 Jun 2010, 16:59

eu acho q ele poderia mostrar os resultados de inventario.
jpaulo
jpaulo

Data de inscrição : 21/03/2010
Reputação : 0
Número de Mensagens : 345
Prêmios : Criando um inventário Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 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

Criando um inventário Empty Re: Criando um inventário

Mensagem por Thiago_o_programador Sáb 19 Jun 2010, 08:37

ta legal, agora entendi, ei cara posta uma engine aí. ;)
Thiago_o_programador
Thiago_o_programador

Games Ranking : Nota D

Notas recebidas : D - C - D - C
Data de inscrição : 14/05/2009
Reputação : 7
Número de Mensagens : 713
Prêmios : Criando um inventário Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 1

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

Ir para o topo Ir para baixo

Criando um inventário Empty Re: Criando um inventário

Mensagem por BioTrust Sáb 19 Jun 2010, 09:05

Bem legal o tuto! Parabéns, se continuar assim, eu vou ter que sair da equipe, porque nao vou conseguir me igualar a você desse jeito Happy


Mas agora falando serio,
Ficou muito bom mesmo esse tutorial, parabens, se superou totalmente. Espero que esse conhecimento continue crescendo Very Happy

Go EQUIPE ALFA, go!
BioTrust
BioTrust

Data de inscrição : 04/06/2010
Reputação : 0
Número de Mensagens : 410
Prêmios : Criando um inventário 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

http://livrodojovemnerd.blogspot.com

Ir para o topo Ir para baixo

Criando um inventário Empty Re: Criando um inventário

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


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