游戏开发中的道具管理
前言
在开发游戏的时候,我们肯定会处理道具,不论是多大的游戏都有道具。道具的管理方式也是多种多样。下面记录一下我个人在游戏开发中的道具管理方式。
道具的定义
道具的属性基本分为:
ID、类型、数量、图标、名称、等重要信息,还有描述、激活状态、购买此道具的消耗道具等其他信息。不过在配置和传递数据时最重要的属性还是ID,类型和数量这3个。
- ID:也就是道具的唯一标识
- 类型:用于区分道具所在的数据表
- 道具的数量: 可以是拥有的数量,也可以是需要的数量。不论在配置数据的时候还是在传递数据的时候,都需要填写这三个信息。如果直接使用[id,type,num]的形式传递和配置数据也是没有问题的。不过我更喜欢将ID和类型合并,这样在传递和配置数据的时候只需要设置两个数值就可以 了,例如[ID,num]。而ID中是带有类型信息的,比如10001,可以用前两位代表类型,可以标识99-10 + 1 个类型。后边的三位标识道具的ID,可以标识999个道具,如果不够用自己在扩大位数即可。那么我们在配置数据的时候就可以这样填写。这里的62代表一种类型的道具,10002是我定义的视频广告。也就是说62002这个道具是需要用广告开启后才可以使用。所以道具才有激活状态这个属性,这个可以有也可以没有的东西,还是根据自己的项目而定了。
道具管理
以上是定义一个道具的数据格式、配置和使用方式。那么这么多道具应该如何管理呢?
. 各模块管理器 :
负责管理自己的道具,比如增删改查,统一实现一个接口。
. 全局道具管理器:
负责统筹管理,可以有两种方式
- 比如一个活动模块,可能发放各种类型的道具,这些道具属于不同的模块,这个时候全局道具管理器就会通过类型找到模块管理器处理相关逻辑,也就是为什么各模块管理器要实现一个同一的接口的原因了。各模块之间也可以通过这个全局道具管理器进行交互。
- 这个全局道具管理器也可以不调用各模块,而是直接调用存档数据,然后让各模块自己监听数据的变化做对应的处理。
建议
建议只有一个,就是不要把不同类型的数据放到一个数据表中。因为大家都知道的,道具都是有些共同属性的,那索性把武将,武器,等等一些列有相同属性的道具都放到一个表中吧!这样做有几个问题:
- 将同一种类型的东西放到两个表中维护,增加了维护难度。
- 将不同类型的数据放到一个表中,如果我需要配置武器数据,还要先向下拉一百或者几十行略过武将的数据,这也是在增加维护难度。
- 程序在组织模型的时候需要从两个配置数据中获取,增加了复杂度。
- 由于将各模块用的数据都放到了一起,那么只能是作为共有数据一起加进内存,而且不能删除。
所以还是建议同种类型的数据就放到一个表中维护就可以了。
结语
以上是我个人对于道具管理的一些理解,主要还是对于多人开发而语言,希望有不同意见的同学在下方留言,一起交流。
游戏开发中的道具管理相关推荐
- Unity游戏开发中的内存管理_资料
http://mp.weixin.qq.com/mp/homepage?__biz=MzAwMTUzOTczNQ==&hid=6&sn=44228b7260d7a5a3287a4499 ...
- 游戏开发中道具一键合成思路,多级别道具合成,采用递归方法,简单高效。
在游戏开发中我们往往会遇到道具合成的需求,如果玩家自己一级一级的合成太过繁琐,何不直接一键合成他需要的材料,通过递归来完成计算,从初级材料一级一级的完成合成.以下是LUA开发的递归合成思路. --it ...
- 游戏开发中常用的设计模式 【game design patterns】
单例模式(Singleton Pattern):用于确保在游戏中只存在一个实例,例如游戏管理器(Game Manager)或资源管理器(Resource Manager). 工厂模式(Factory ...
- 游戏开发中常用的数据结构和算法
转载Loving_初衷 前言 时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长. ----------<塞尔塔传说> PS:为 ...
- 游戏开发中的数据表示
声明:本文内容源自腾讯游戏学院程序公开课_服务端 一.数据表示的基础 什么是数据表示? 数据是信息的载体. 数据表示是一组操作,可以描述.显示.操作信息. 数据表示的要素 IDL - 接口描述语言 I ...
- 手把手教你架构3d游戏引擎pdf_游戏开发中的算法
游戏技术这条路,可深可浅.你可以满足于完成GamePlay玩法层面的东西,你也可以满足于架构和框架设计层面的东西,你也可以醉心于了解某一游戏引擎带来的掌控感.但是,我们不该止步于此,止步与目前所见或所 ...
- [命令模式]在游戏开发中的应用
设计模式中的每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复劳动. 一个设计模式,它的服务对象是高层模块,在设计模式中称为客 ...
- 游戏开发中的专业术语
本文整理了网络/游戏/编程相关的专业术语,作为游戏开发中的辅助参考资料,后期如果遇到其他的术语还会更新. 16毫秒 / 帧速率 Frame Rate. 电子游戏使用的光栅显示器是普通电视时,图像一般每 ...
- 【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结
本文由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/78884513 导读 这是一篇1万3千 ...
最新文章
- gin.context 怎么在其他包中获取 只能传递吗_跨进程传递大图,你能想到哪些方案呢?...
- php获取excel时间,详细介绍PHPExcel读取Excel时间的示例代码
- SSH实现分页查询(转)
- Linux中设置ip
- Lintcode Subarray Sum Closest
- android 环境配置和安装, Android系统包说明,基本控件,常用代码,ADB 命令行,APK文件确解,小技艺,...
- mysql中当前时间九点_MySQL 获得当前日期时间(以及时间的转换)
- 前端学习(3056):vue+element今日头条管理-反馈
- esclip直接快捷键构造函数_史上最全IntelliJ IDEA mac版快捷键文档
- 矩阵连乘 动态规划 详解
- 5 个 IDEA 必备插件,让效率成为习惯
- 苹果秋季新品发布会终于官宣:然而并不会发布新iPhone?
- hybris Models
- Unity飞机大战源码下载
- 计算机中的前端和后端岗位,前端工程师的岗位职责
- Vue使用createWebHistory 页面刷新变成白页 解决
- PassMark PerformanceTest v10.1.1004 电脑性能测试工具直装版
- Vue中的深坑——component和components
- 如何让淘宝店铺排名更靠前 淘宝搜索排名技巧分享
- 和李笑来学python——《自学是门手艺》
热门文章
- 关于test指令和add指令的区别,inc指令和add指令的区别
- java中double_java中float和double的取值范围是什么?
- 初学java-----画板
- 如何选择一款适合自己的ssl证书?
- Missing artifact javax.jms:jms:jar: Missing artifact com.sun.jdmk Missing artifact com.sun.jmx:jmxri
- ICLR 2022 | ORFD: 第一个开源的越野环境可行驶区域检测数据集
- “健康中国”战略下如何推进公共卫生建设,海尔生物医疗给出“智慧答案”
- Redis Lua 脚本常用操作总结及实现 CAS 操作
- emacs 自带的简单入门教程
- 如何部署我们的第一个微信小程序EGO商城