传奇攻击倍数叠加脚本 《刀塔传奇》主程:我们踩过的那些坑

11/27 23:21:09 来源网站:辅助卡盟平台

刀塔传奇在程序启动的时候,会从服务器上面拉一段代码下来,然后执行这段代码。由于这个逻辑是在发生在lua代码加载之后,于是就可以用拉取下来的代码段覆盖版本里面的lua代码。

注意:用loadstring只能覆盖全局域下面能访问到的函数,从程序设计方面来说,一个模块应该对外暴露尽可能少的接口,但是从线上热更来看,应该让全局域下面能访问到尽可能多的函数,这样可以提高线上热更代码的覆盖率。

2)游戏内更新包

这是刀塔传奇的常规更新方式,一般用来更新大特性版本。更新的内容包括lua脚本,美术资源,策划资源。由于代码都是lua脚本,更新完成后,可以通过重新初始化整个lua state,达到更新包在游戏运行时生效。

注意:更新包不能用于解决更新流程之前的bug;当一个版本有连续几个比较大的更新包之后,可以考虑出一个非强制更新的全量包给到渠道,这样有助于提高新进玩家的转化率。

3)全量包更新

这个是我们最不愿意采用的版本更新方式,有一些时候不得不用。比如《刀塔传奇》刚刚上线的时候跨服蓝牙堆栈功能。

这边每个数据跟大家分享一下,每次完整包更新的时候,当日的日活跃大概会少10多万。它的优化方案,制作低清版本,解决包大小的问题,还有一种是在游戏内准备继承一个下载器的功能,就是在游戏启动过程当中,跟游戏更新包类似,在游戏启动过程当中完成一个全量包的下载和安装辅助论坛,达到优化更新体验的目的。

传奇攻击倍数叠加脚本_传奇多倍攻击叠加脚本_传奇合击攻击倍数

调试问题

Lua的开发者经常会碰到的感觉,就是开发效率极快,一下子做起来了,但是维护特别的困难,其中很重要的原因就是调试困难,很难找到bug。

除了常规的print和log的方法,刀塔传奇使用lua的debug库开发了一个DEBUG函数,作用类似ide环境下面的断点。该函数会先输出当前的调用堆栈,并进入循环等待用户输入调试语句,在该状态下,通过debug库提供的getinfo等函数可查看指定level堆栈下的local和upvalue。

错误提示框

我们还做了一个游戏错误框,类似这样的效果图。我们《刀塔传奇》是在PC下面开发的传奇攻击倍数叠加脚本,等版本发布出来,到Andriod、iOS一跑就各种问题,也不知道出现了什么问题,然后到各种下面去查非常的麻烦。然后我们就在手机发布上面去添加了这么一个框,当有错误的时候它可以以这个形式展现过来,我们在发布内部的测试版方面,我们发这么一个框,可以很容易的定位到手机版本的问题,他们提交的bug单可以让我们找到错误的信息,这对bug来说是很方便的事情。

Snapshot:解决Lua脚本内存泄漏

传奇合击攻击倍数_传奇多倍攻击叠加脚本_传奇攻击倍数叠加脚本

使用lua开发也会存在内存泄漏的问题,snapshot可以对当前的Lua State做一个完整的快照,并记录对象的引用关系,我们可以在不同的手机端对Lua进行两次快照,通过两次的对比可以的出新增加的内存处于何处。

它在第一行做了一个快照,分配了一个Test1,然后他又做了一个S2,这对我们定位的内部发生了斜路都有很好的解决。特别是对Lua问题发生的不太容易发现的,通过添加这种方式可以解决。

性能问题

把性能瓶颈相关的代码用C或C++实现。

为了解决draglist渲染效率低下的问题,添加了可见性裁剪的功能,将不在显示区域的item项设置为不可见。第一版的做法是通过通过lua导出接口,在lua层实现裁剪,确实减少了draw call的调用,不过却增加了cpu的负担,主要是因为产生了大量的lua调用导出接口原因。第二版就直接在node层面上现实自动裁剪,在visit的函数里面判断是否可见。

对table预先分配大小,减少rehash。

当我们把新的键值赋给table的时候,若数组和哈希表已经满了,更会触发一个再哈希(rehash),再哈希的代价是高昂的,首先会在内存中分配一个新的长度的数组,然后将所有记录再全部哈希一遍,将原来的记录转移到新数组中。

Lua的创新跟其他的脚本实现方式不太一样,它采用了内例化的实现方式,所有的字符串在Lua中都只储存一份拷贝,并且都以引用的方式保存。这边可以考虑一下,Lua保存的方式可以用table保存。

来源:【九爱网址导航www.fuzhukm.com】 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    暂无相关资讯
传奇攻击倍数叠加脚本 《刀塔传奇》主程:我们踩过的那些坑