【转】简易数组做库存
construct2吧
全部回复
仅看楼主
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
level 13
totoyan72021 楼主
2017年03月01日 02点03分 2
level 4
不错。
2017年03月01日 03点03分 3
level 6
说好的简易呢,已懵逼[惊哭]
2017年08月04日 05点08分 4
level 6
照着做,这条弄不出来[狂汗]
2017年08月04日 05点08分 5
[阴险]array.curX要在循环数组里用,然后你X里面的写法也是错的,
2017年08月04日 06点08分
@totoyan72021 []然而还是卡在这里。还是不懂。。心累。。
2017年08月05日 11点08分
level 6
[累了]
2017年08月05日 11点08分 6
[怒]看了下书,终于知道怎么回事了。。。
2017年08月05日 13点08分
2017年08月07日 02点08分
@麻日 这条怎么弄啊?我也不会[不高兴]
2017年08月07日 02点08分
@Duang睡觉 设X,Y的值,不是设X
2017年08月07日 04点08分
1