level 13
totoyan72021
楼主
我们知道,几乎所有RPG游戏内,背包、仓库、道具栏等等基本为一大重点系统,一般情况下,我们使用数组来完成这个系统,所以分享一篇简易数组制作道具栏,可以参考下思路来完成更大的背包系统。
-----------------------------------------------------------------------------
Easy Inventory Using An Array --@EncryptedCow
添加数组
让我们先来添加数组,将它命名为arr_inventory。接下来决定你将有多少个插槽,并将该数字放入数组宽度。将高度设置为2,深度设置为1,并将其保留。
添加对象
为此,我们将需要2个对象。一个将用于道具,另一个将用于插槽。将对象1命名为spr_groundItem。接下来,对象1添加道具帧,0来表示没有;

然后对象2名为spr_invSlot的插槽。操作同上,并在图像中添加一个简单的黑色边框与内部的图像。此对象将需要名为slotID的实例变量。这也需要第一帧(帧0)为空以表示没有项目。

添加文本对象
此部分不是必需的,除非您要在每个插槽中显示金额。首先创建一个名为txt_slotAmt的新文本对象,并给它一个名为slotID的实例变量。
美化
设置你的插槽和文本对象,使他们看起来不错。顶部的对象是我们的“道具项”。invSlot和slotAmt对象的slotID需要从0开始递增1.左边第一个为0,右边第3个结束。

获取插槽和文本准备就绪
我们要做的第一件事是创建一个函数来更新invSlot和slotAmt对象。这是一个简单的for循环,将每个invSlot设置为其各自插槽的项目ID,并将slotAmt设置为该插槽中有多少项。

拾起物品事件

参数
Param0是要添加到清单的项目的ID。
Param1(可选)是应该添加多少项。如果没有通过,默认值为1。
变量
foundSlot - 用于跟踪是否找到包含相同项目的另一个插槽。
emptySlot - 存储找到的第一个空插槽的 slotID。
amountToAdd - 正在向库存添加多少项目
事件说明
事件8 - 重置变量。
事件9-10 - 检查是否只传递了1个参数。如果是,默认amountToAdd为1.否则,将其设置为Param1。
事件11 - 循环访问Inventory数组中的每个X元素。如果已经找到一个插槽,停止循环。
(注意事项:在这个循环内,当前槽将等于arr_inventory.CurX,当前项ID将是arr_inventory.CurValue)
事件12 - 如果当前槽中的项目ID为0,则表示它为空。如果还没有找到空槽(我们想要第一个空槽,而不是最后一个空槽)将当前槽存储在emptySlot中。
事件13 - 如果当前槽中的项目的ID匹配我们正在添加的项目ID(Param0),我们将foundSlot设置为当前槽,将amountToAdd添加到槽中当前项目的数量,最后调用UpdateInventory函数。
事件14 - 首先确定当前插槽是否为库存数组中的最后一个插槽。如果是,请确保找不到匹配的插槽,并且存在空插槽。然后,第一个空槽(emptySlot)可以设置为要添加的项目的ID,并且该槽中的数量可以设置为amountToAdd。然后调用UpdateInventory函数。
移除道具

参数
Param0是我们将从中删除项目的 slotID。
Param1是应该删除多少项。
变量
itemsRemoved - 从插槽中删除了多少项(如果“Param1”大于实际有多少项)
事件说明
事件18 - 首先设置的项目删除到最小(当前插槽金额,Param1)这将获得两个数字中较低的一个,以防止删除更多的项目,而不是该插槽实际上有。然后从在Param0中传递的插槽中删除该数量。
事件19 - 如果该插槽现在为空,则将插槽ID设置为0以表示空插槽。设置该槽中的数量不是完全必要的,我只是在那里作为故障安全
事件20 - 最后,调用UpdateInventory函数并返回itemsRemoved。返回变量不是必要的,除非你需要它在别的地方(例如,放在地上的那些项目)
其他
要从清单中添加/删除项目,我们只需在点击groundItem或invSlot时调用这两个函数。

2017年03月01日 02点03分
1
-----------------------------------------------------------------------------
Easy Inventory Using An Array --@EncryptedCow
添加数组
让我们先来添加数组,将它命名为arr_inventory。接下来决定你将有多少个插槽,并将该数字放入数组宽度。将高度设置为2,深度设置为1,并将其保留。
添加对象
为此,我们将需要2个对象。一个将用于道具,另一个将用于插槽。将对象1命名为spr_groundItem。接下来,对象1添加道具帧,0来表示没有;

然后对象2名为spr_invSlot的插槽。操作同上,并在图像中添加一个简单的黑色边框与内部的图像。此对象将需要名为slotID的实例变量。这也需要第一帧(帧0)为空以表示没有项目。
添加文本对象此部分不是必需的,除非您要在每个插槽中显示金额。首先创建一个名为txt_slotAmt的新文本对象,并给它一个名为slotID的实例变量。
美化
设置你的插槽和文本对象,使他们看起来不错。顶部的对象是我们的“道具项”。invSlot和slotAmt对象的slotID需要从0开始递增1.左边第一个为0,右边第3个结束。

获取插槽和文本准备就绪我们要做的第一件事是创建一个函数来更新invSlot和slotAmt对象。这是一个简单的for循环,将每个invSlot设置为其各自插槽的项目ID,并将slotAmt设置为该插槽中有多少项。

拾起物品事件
参数Param0是要添加到清单的项目的ID。
Param1(可选)是应该添加多少项。如果没有通过,默认值为1。
变量
foundSlot - 用于跟踪是否找到包含相同项目的另一个插槽。
emptySlot - 存储找到的第一个空插槽的 slotID。
amountToAdd - 正在向库存添加多少项目
事件说明
事件8 - 重置变量。
事件9-10 - 检查是否只传递了1个参数。如果是,默认amountToAdd为1.否则,将其设置为Param1。
事件11 - 循环访问Inventory数组中的每个X元素。如果已经找到一个插槽,停止循环。
(注意事项:在这个循环内,当前槽将等于arr_inventory.CurX,当前项ID将是arr_inventory.CurValue)
事件12 - 如果当前槽中的项目ID为0,则表示它为空。如果还没有找到空槽(我们想要第一个空槽,而不是最后一个空槽)将当前槽存储在emptySlot中。
事件13 - 如果当前槽中的项目的ID匹配我们正在添加的项目ID(Param0),我们将foundSlot设置为当前槽,将amountToAdd添加到槽中当前项目的数量,最后调用UpdateInventory函数。
事件14 - 首先确定当前插槽是否为库存数组中的最后一个插槽。如果是,请确保找不到匹配的插槽,并且存在空插槽。然后,第一个空槽(emptySlot)可以设置为要添加的项目的ID,并且该槽中的数量可以设置为amountToAdd。然后调用UpdateInventory函数。
移除道具

参数Param0是我们将从中删除项目的 slotID。
Param1是应该删除多少项。
变量
itemsRemoved - 从插槽中删除了多少项(如果“Param1”大于实际有多少项)
事件说明
事件18 - 首先设置的项目删除到最小(当前插槽金额,Param1)这将获得两个数字中较低的一个,以防止删除更多的项目,而不是该插槽实际上有。然后从在Param0中传递的插槽中删除该数量。
事件19 - 如果该插槽现在为空,则将插槽ID设置为0以表示空插槽。设置该槽中的数量不是完全必要的,我只是在那里作为故障安全
事件20 - 最后,调用UpdateInventory函数并返回itemsRemoved。返回变量不是必要的,除非你需要它在别的地方(例如,放在地上的那些项目)
其他
要从清单中添加/删除项目,我们只需在点击groundItem或invSlot时调用这两个函数。


