如何建立一个世界玩家库存系统?


11

我遇到了一个尝试在XNA内实施清单系统的问题(这并不重要,可以是任何平台),但是到目前为止。这是我要解决的问题:

我如何才能从世界上获得一件物品(想想当您杀死一个怪物时,它会掉落护甲)并将其放入玩家的库存中吗?

如果库存只是物品清单,从技术上讲,如何在没有上课的情况下将世代钢剑带入玩家的库存中?

我目前有一个项目结构,其中包含一个唯一的十六进制值,一个有多少项目的计数(用于可堆叠对象,如箭头)和一个用于在库存中进行渲染的纹理,以及一些其他不重要的属性(名称,说明等) 。

如果我必须修改现有的项目类以容纳世界位置以及碰撞检测(这不希望该项目掉落到地球上),那将是一个糟糕的设计。

感谢您的考虑!


4
您不能只拥有一个WorldItem与您分开的商品InventoryItem吗?(也许它WorldItem有一个InventoryItem模板,拾取后会放入玩家的库存中)。
乔治·达基特

1
@GeorgeDuckett您应该将其作为答案..中可能应该有一些Inventory采用WorldItem并将其添加为的方法InventoryItem。这样它也可以处理需要堆叠物品的情况(例如箭头)。
bummzack,2012年

@bummzack:完成。
George Duckett 2012年

Answers:


17

我要采用的方法是拥有2个不同的结构(或类)。WorldItemInventoryItem

然后,您可以添加一个,InventoryItem作为您的属性/字段,该属性/字段WorldItem是在拾取世界物品时放置在玩家库存中的内容。

您想要某个方法(在玩家类或任一物品类上)在某个地方处理将物品添加到玩家的物品上的方法,以处理类似物品的堆放。


我真的很喜欢这个答案,非常感谢,这很有意义!最后一个想法,假设这个人想放一个物品,库存物品是否也需要一个WorldItem?
罗斯

如果需要两种方式,我很想拥有一个单独的“查找”类,该类存储成对的世界物品和库存物品。然后,您可以使用它来查找其中的一个。
乔治·达基特

哦,很好,没想到。这是一个非常有趣的想法。由于所有项目都是具体的,因此有必要对其进行查找。
罗斯

2
我将在拾起WorldItem时销毁它,并在放置该项目时创建一个新物品。
西蒙·里希特

同意 并不是要暗示其他意思。
George Duckett 2012年

0

如前所述,拆分为多个类或数组将是您的最佳选择。我将创建3个类,World,Player和Item World类中将有一个List WorldItems,Player类也将有一个List,但是命名为List Inventory当玩家拿起一个物品时,将其从World的列表中移出类到Player类中的列表。

在游戏的绘制循环中,您可以制作一个循环,将WorldItems列表中的所有Item绘制到屏幕上,但是当然会忽略玩家对象上的Inventory列表。


现在,我当前的方法是我有一个WorldItem类,该类封装了一个InventoryItem,两者都属于同一项目。在“游戏的更新”方法中,我循环浏览所有世界物品并测试与玩家的碰撞边界。如果两个碰撞,则将WorldItem从WorldItem列表中删除,并放入玩家的清单中(这是InventoryItem的List <>)
罗斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.