在游戏开发中我们往往会遇到道具合成的需求,如果玩家自己一级一级的合成太过繁琐,何不直接一键合成他需要的材料,通过递归来完成计算,从初级材料一级一级的完成合成。以下是LUA开发的递归合成思路。

--itemId是需要计算的道具ID

--need_num 是需要itemId这个道具的数量

local function Itemfunc(self,itemId,need_num)

--这一步是去道具表去道具信息,如果没有就退出

local cfg = assemble_cfg[itemId]

if cfg == nil then

--如果走到这里说明已经走到了最低级的道具的下面一层,最低级的道具没有合成道具,所以表会返回nil,此时退出递归,提示道具不足 无法合成

return false

end

--如果有就去存道具的Data里面拿玩家目前拥有的该的道具数量,一般是服务器发过来的。

local num = BackpackData:GetInstance():GetUsedItemCount(cfg.material)

--然后用需要合成的道具数量乘以道具表里规定的合成需要数量 计算出玩家可以获得多少个道具。

local need_num =  need_num * cfg.num

--然后用玩家自己以后的道具数量减去合成需要的道具数量,获得还缺少多少道具

local how_much =  num - need_num

--如果大于0则存在把道具信息存在一个列表里,这样可以展示给玩家看,每个级别的道具消耗的数量。

if num > 0  then

local list = {

id = cfg.material,

value = num,

}

if how_much >= 0 then

list.value = need_num

end

table.insert(self.item_list,list)

end

--如果数量大于等于0则说明道具已经足够合成,反之则把合成所需要的道具ID和需要这个道具的数量传入递归,进行下次计算,直到结束。

if how_much >= 0 then

return true

else

return Itemfunc(self,cfg.material, math.abs(how_much))

end

end

游戏开发中道具一键合成思路,多级别道具合成,采用递归方法,简单高效。相关推荐

  1. 游戏开发中的道具管理

    前言 在开发游戏的时候,我们肯定会处理道具,不论是多大的游戏都有道具.道具的管理方式也是多种多样.下面记录一下我个人在游戏开发中的道具管理方式. 道具的定义 道具的属性基本分为: ID.类型.数量.图 ...

  2. 游戏开发中常用的数据结构和算法

    转载Loving_初衷 前言 时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长. ----------<塞尔塔传说> PS:为 ...

  3. 游戏开发中常用的设计模式 【game design patterns】

    单例模式(Singleton Pattern):用于确保在游戏中只存在一个实例,例如游戏管理器(Game Manager)或资源管理器(Resource Manager). 工厂模式(Factory ...

  4. 【转载】【《Real-Time Rendering 3rd》 提炼总结】(九) 第十章 · 游戏开发中基于图像的渲染技术总结

    本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/78309500 这是一篇近万字的总结式 ...

  5. 【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结

    本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/78884513 导读 这是一篇1万3千 ...

  6. VR硬件演进与其游戏开发中的若干注意事项

    最近两年虚拟现实(Virtual Reality,简称VR)从刚刚走进公众视野到逐渐变得炙手可热,很多不同领域的IT开发者都想进入虚拟现实领域.本篇文章将首先讲解VR入门所需要学习的知识,然后从VR软 ...

  7. 游戏开发中,图片资源的精简

    蒙板压缩对比图:(此方法可大幅减小游戏包的大小) 包大小对比: 在游戏开发中,包的大小总是与图片资源的大小密切相关,而图片资源中,大多为带有透明度信息的png图像. 那么,如何精简png图片资源呢? ...

  8. 【《Real-Time Rendering 3rd》 提炼总结】(九) 第十章 · 游戏开发中基于图像的渲染技术总结

    本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/78309500 这是一篇近万字的总结式 ...

  9. 坦克大战游戏开发中的设计模式总结

    坦克大战游戏开发中的设计模式总结 github地址: https://github.com/2017403603/TankGame_Simple1.0.git https://github.com/2 ...

最新文章

  1. 又一位!26岁当上985博导,读博期间也曾两次想要退学......
  2. C语言函数集(十二)
  3. linux wc命令参数及用法详解
  4. stand-alone android sdk tools,android make-standalone-toolchain.sh 使用说明
  5. GIS配准和配准算法基本概念学习
  6. RecyclerView因版本问题无法加载
  7. Linux cp 命令的15个示例 - 创建文件和目录的副本
  8. 用python让excel飞起来 pdf_能听会写的科大讯飞智能办公本,让工作效率瞬间翻番!丨试用...
  9. 高阶篇:8.1)开模前评审及提交资料;
  10. 数字温度传感器DS18B20的数据手册理解
  11. Linux的顶级十六进制编辑器
  12. ScreenCapture API – QTP截屏工具
  13. mysql不配置环境变量可以吗_MySQL配置环境变量
  14. uni.navigateTo传参
  15. 微信小程序 实现换肤功能
  16. redis sadd 命令 以及 删除set集合或者单独删除set中的一/多条记录
  17. 【JAVA基础】重新系统学习Java(五)案例一
  18. 陈安之励志演讲经典句子
  19. 一篇文章教你如何写出【✨无法维护✨】的代码?
  20. Linux 内核揭密

热门文章

  1. 机械制造作业考研题目答案分享——金属切削规律3
  2. 初中计算机期末质量分析,信息技术期末质量分析
  3. 使用Trove的integration定制化trove镜像
  4. IOS 自带地图开发
  5. 应用bootstrap模板
  6. 网页复制内容修改(解决复制文本多空格问题,带标注信息(如版权信息))
  7. redis学习之redis的发布和订阅
  8. php ci cors,javascript-CORS请求在Safari中不起作用
  9. VUE 项目更新部署时,浏览器页面缓存问题
  10. Android App 专项性能监控工具