Versão: Game Maker: Studio
Nível: Iniciante
Imagens:

Sobre: Esse projeto de exemplo é uma versão bem mais simples que o projeto que disponibilizei aqui recentemente e mostra o básico para se fazer um inventário, onde o jogador vai poder:
* Clicar em um item de fora para enviá-lo ao inventário;
* Clicar em um item do inventário para "dropá-lo."(Nesse exemplo, apenas deletar o item do inventátio)"
LINK DA VERSÃO MAIS AVANÇADA DO INVENTÁRIO
Funcionamento: Basicamente a lógica do exemplo funciona assim:
* Existe duas sprites, a primeira é uma imagem 32x32 que é usada para desenhar os "slots" do inventário. A segunda sprite é usada para desenhar os itens, dentro dessa sprite existem várias sub imagens sendo cada uma delas referentes a um tipo de item.
Sub imagem 0: Está vazia, é para quando o slot estiver vazio;
Sub imagem 1: Representa o item1, que é um vidro de porção azul;
Sub imagem 2: Representa o item2, que é um vidro de porção vermelho;
Sub imagem 3: Representa o item3, que é um vidro de porção verde;
Sub imagem 4: Representa o item4, que é um vidro de porção amarelo;
* Somente os itens fora do inventário são objetos verdadeiros, os itens dentro do inventário são apenas sprites desenhadas de acordo com o item alocado dentro de cada "slot" na array. Os itens fora do inventário são todos instâncias do mesmo objeto, o que os diferencia é apenas a sub imagem de suas sprites que se baseiam no valor da variável item_type. Essas sub imagens são atribuídas da mesma forma que foi explicado acima.
* Primeiramente, no Evento Create do obj_inventory é criado uma array2D[a,b] que será o inventário por assim dizer, e esta array2D[a,b] será baseda nos valores de:
a: culumnsNumber: É o número de colunas horizontais que o inventário vai conter. Como é usado array, não será possível mudar o tamanho do inventário posteriormente. Caso isso seja preciso, deve-se então usar listas.
b: slotsNumber: É o numero de "slots" que cada coluna horizontal vai ter.
Assim que a array2D chamada de inventory[] for criada, ainda no Evento Create vai ter um loop for que vai percorrer cada um dos "slots" e passar o valor 0 para eles começarem vazios.
Por exemplo: Se passar o seguinte valor para a array inventory[0,2] = 4 o terceiro slot da primeira coluna terá o valor 4 que é referente ao item4(porção amarela). PS: Observe que o índice a da array se refere ao número das colunas horizontais e o índice b se refere ao número de "slots" que cada coluna horizontal vai ter.
* Após criar a array2D do inventário, no Evento Draw é desenha os "slots" um a um usando outro loop for. Aproveitando esse mesmo loop, é feita a verificação do valor que o "slot" contém e já desenha o item referente ao seu valor. Dessa forma, sempre que trocar o valor de cada "slot" do inventário, já vai atualizar automaticamente os itens disponíveis.
* A partir daí, basta ir mudando o valor dos elementos da array conforme as coisas vão acontecendo em seu jogo. No exemplo, eu usei os clicks do mouse para adicionar e deletar os itens do inventário.
* Sempre que clicar em um item de fora do inventário, primeiro vai verificar se tem um slot vazio antes de enviar o item ao inventário, caso contrário vai aparecer uma mensagem dizendo que o inventário está cheio.
* Todo o código está comentado e fácil de entender. Os comentários estão em inglês, pois eu sempre programo dessa maneira e eu recomendo à quem quer ser um programador que faça o mesmo.
Para saber mais sobre arrays, acesse o link da documentação do Game Maker Studio: Arrays Docs
Download:
DOWNLOAD LINK