道具堆叠
常用变量
一个道具类通常会有三个核心字段
| |
根据itemId可以从配置找到堆叠的最大数量maxOverlap
需要一个容器来维护所有道具,我们定义一个背包类,里面有个变量维护堆叠
| |
实现
添加道具
添加道具的时候,首先是要判断当前是否存在堆叠(道具数量为一时也算是一个堆叠)。
- 如果没有堆叠,需要再次判断背包是否有空格。如果满足条件则new一个道具对象,将道具信息维护在背包类
BagBase的itemPool中。 - 如果存在堆叠,则会有以下情况:
- 新增道具数量 + 原有道具数量 > 堆叠上限。因为原有的道具堆叠可能存在多个,因此需要索引道具id找到对应的堆叠,然后遍历找到未满的堆叠,然后将新增数量填充到未满的堆叠上面。如果在填满旧堆叠之后,新增数量仍大于0,需要创建新的道具对象,此时需要判断背包各自是否充足。
- 新增道具数量 + 原有道具数量 <= 堆叠上限。这时候就可以直接修改
Item对象的count字段,以及修改背包类BagBase的itemPool的数量。返回成功
删除道具
具体要看策划要求是从数量最少的堆叠开始删还是不做要求。
从itemPool中找到一个道具对象,删除对应数量即可
实体堆叠
类似装备,符文等
实体堆叠添加、删除、维护和道具堆叠一样,不过可能会出现穿戴和卸下的情况
分离
分离是指从原本的堆叠中分离出一个新的实体对象obj,即类型相同,uid不同。用于区分新的实体和堆叠实体,防止影响原本的堆叠。
穿戴
当实体堆叠数量时最后一个的时候,需要分离的时候可以new一个新的对象,直接沿用堆叠中的last one。同时要注意在穿戴最后一个实体的时候,如果当前模块存在背包容量的设定,需要给当前背包腾出一个空格。
卸下
当实体卸下的时候,如果这个实体是背包中的第一个堆叠(背包中原本没有这种类型的堆叠),可以沿用这个实体类型(可以少new一次对象)。同时要注意背包格子是否允许创建堆叠。
升级、升阶等
同样是先分离,后操作。根据策划的需求可以维护不同的堆叠,即维护itemPool.
假如策划需要同实体类型,同等级的实体叠在一起,这时候itemPool旧需要创建多一层映射
| |