数值程序化 lua中的load运用

[TOC] 数值条件 以下是游戏中常见条件达到逻辑 收集X个Y道具 角色达到Y级开启 任意一个装备升级到Y品质 … 如何在策划配置表中,定义以上规则?常见的办法就是预先定义事件类型X和事件值Y,代码中监听事件X,根据事件的具体逻辑计算相关当前值与事件Y比较,以得出是否满足配置项的条件。 目标类型 说明 1 获得道具 2 角色当前等级 3 升级装备 配置数值 说明 {1, X...
Click to read more ...

lua代码规范

[TOC] 命名 小写蛇形命名 文件和目录名 本地变量,全局变量g_开头 local my_var = 0 g_my_var = 0 大写蛇形命名 全局常量,以G_开头 G_SERVER_ID = 1 全局枚举,以E_开头且_TYPE结尾 E_SERVER_TYPE = { LOGIN = 1, GAME = 2, GLOBAL = 3, } bool类型变量,使用正向命名 -- bad local fail = false if not fail then -- do something end ...
Click to read more ...

搭建centos基础开发环境的一些考虑

或许会有疑问,只要项目工程预编译好二进制文件,checkout下来就能跑了,几乎不需要再给centos安装些什么环境!因为开发过程还可能需要ssh远程,设置账号权限,设置网络端口规则,崩溃调试和性能采集等。作为技术人员可以很轻松地完成这些工作,但实际情况是非技术人员也有可能要搭自己的本地运行环境,尽管提供了搭建文档,但对他们来讲处理这些并不容易。 考虑各个项目的代码框架各有差异。此处不会涉及广泛的内容,仅以C/C++游戏后端开发基于Window主机+centos客机的搭建模式,其中只安装了必备的一些工具,你可能需要根据项目框架的实际情况另行安装。 开发环境配置的基础认知: 搭建本地运行环境有很好的隔离作用。使用项目任务得以尽可能并行开发而互不干扰。技术同事有着各自的前端/后...
Click to read more ...

计算平均值,复杂度O(1)

公会对象按以下形式缓存了所有成员的最新等级iLevel,要求实时刷新公会成员的【平均等级】,成员最多200人。 tMemberMap = { [角色ID1} = {iLevel=1, sPlayerName="xxx", ... } [角色ID2} = {iLevel=2, sPlayerName="xxx2", ... } ... } 当成员加入或离开公会或角色升级,触发重刷平均等级,简单的做法是遍历tMemberMap计算出【等级总和】,后除以【成员人数】。 公会成员最多只有200人,这样的做法绝对不会有性能问题。但这里我想发散一下,如果是海量数据呢?或者没有缓存信息tMemberMap呢? 我分析了一下,还是依据公式【平均等级】=【等级总和】/【成...
Click to read more ...

排行榜-排序

以下是lua版本二分插入排序 -- lua实现 function binary_insert(list, value)     local left = 1     local right = #list     local mid = -1     while left <= right do         mid = math.floor((left + right)/2)         if list[i] == value then             left = mid             right = mid             break         elseif list[i] < value then             lef...
Click to read more ...

游戏开发纲领

鉴于各个项目开发的游戏类型、开发规模和组织结构等有所差异,下文总结了大部分项目开发会涉及到的纲领性总结。有些内容,不便于详细展开,有需要会另开文章介绍。 本人亲身经历其中大部分事项以及流程改进,少部分内容是个人见解并有待验证。 本人能力有限,半刻之间未能想全,此后一旦想起要点,会逐渐添加和完善,如有不对欢迎指正。 [TOC] 框架开发 网络数据 数据格式 节点间通信。它不像与前端的通信变动频繁,框架定下来后基本不变,格式不需要较高灵活性。另外署上,这 些节点只在内网通信,理论上也不需要太高的安全性或去掉加密。 前端延时不敏感的业务。可以牺牲部分性能,来满足读写灵活,比如支持数组和嵌套类型。常见的高序列化库有 msgpack和proto...
Click to read more ...

lua与c交互笔记

lua 5.3官方英文手册 lua 5.3runoob.com中文手册 交互栈注意事项 栈不是一个全局性的结构,每次函数调用都有自己的私有交互栈。尽管出现递归调用,还是有各自的私用栈。 压/弹栈中的元素个数,具体要看capi的实现来理清元素的位置,否侧参数/返回值个数不对,或类型错误引起逻辑错误。常见的规则如下 lua_toXXX系列函数,都不会将栈顶元素弹出 lua_call,lua_settop这类通过参数,影响弹出多个栈顶元素 lua_next务必符合特定的栈结构,才能遍历元素。 不是所用capi都支持伪索引LUA_REGISTRYINDEX,lua_pcall的第四个参数异常处理函数,就不支持伪索引。 ...
Click to read more ...