Estou com um problema ao tentar implementar um sistema de inventário no XNA (realmente não importa, poderia ser qualquer plataforma), mas até agora. Aqui está o problema que estou tentando entender:
Como posso obter um item do mundo (pense que quando você mata um monstro ele solta armadura) e o coloca no inventário do meu jogador?
Se um inventário é apenas uma lista de itens, tecnicamente, como eu poderia colocar a Steel Sword do mundo no inventário do meu jogador sem que uma classe fizesse mais de uma coisa?
Atualmente, tenho uma estrutura de item, que contém um valor hexadecimal exclusivo, uma contagem de quantos itens existem (para empilháveis, como setas) e uma Textura para renderização dentro do inventário e algumas outras propriedades sem importância (nome, descrição, etc.) .
Seria um design ruim se eu tivesse que modificar minha classe de item existente para abrigar uma posição mundial, juntamente com a detecção de colisão (não quero que o item caia pela terra).
Obrigado por todas as considerações!
WorldItem
que é separado do seuInventoryItem
? (Talvez eleWorldItem
tenha umInventoryItem
modelo que é colocado no inventário do jogador quando coletado).Inventory
qual pegue umWorldItem
e o adicione comoInventoryItem
. Para que ele também possa lidar com casos em que os itens precisam ser empilhados (por exemplo, setas).Respostas:
A abordagem que eu adotaria é ter 2 estruturas (ou classes) diferentes.
WorldItem
eInventoryItem
.Você pode então adicionar um
InventoryItem
como uma propriedade / campoWorldItem
que é o que é colocado no inventário do jogador quando o item mundial é retirado.Você deseja um método em algum lugar (na classe de jogador ou em qualquer classe de item) que lida com a adição de um item de inventário ao inventário do jogador, para lidar com o empilhamento de itens semelhantes.
fonte
Como mencionado antes, dividir-se em várias classes ou matrizes seria sua melhor aposta. Eu criaria 3 classes, Mundo, Jogador e Item. A classe mundial teria um List WorldItems, assim como a classe Player, mas denominada List Inventory Quando um jogador pega um item, você o move da lista no World. classe à lista na classe Player.
No loop de empate do seu jogo, você pode fazer um loop que atraia todos os itens da lista WorldItems para a tela, mas obviamente ignora a lista de Inventário no objeto do jogador.
fonte