刀塔传奇电脑版(刀塔传奇版本大全)

aitu6661年前 (2025-02-01)常识63
《刀塔传奇》主程:我们踩过的那些坑

游戏葡萄原创专稿,未经允许请勿转载

月日,在Cocos开发者大会(秋季)上,《刀塔传奇》的主程张振新做了客户端技术经验分享。他们选择的是Cocos2d-x结合小巧高效的Lua,它提高了开发效率,对手游面临的复杂版本更新问题也颇有助力。

《刀塔传奇》是张振新与团队从端游转入手游开发的第一款产品,在他的演讲中,还提到一些众多初创手游团队可能都会遇到的“坑”。

比如:“刀塔传奇是在win环境下面开发,早期经常碰到一个问题就是开发环境下面功能都ok,可到版本一发布,在手机上面就各种不对,也不知道是哪里错误。”他们使用错误信息框的方式来解决这种调试问题。

又比如一个数据,他们每次用全量包更新,当日DAU就会大概减少%。优化方案是,制作低清版本来解决包大小的问题,或者在游戏内集成下载器,在启动游戏的过程中,完成全量包的下载和安装。

更多张振新的分享,见以下整理内容。

大家好,我叫张振新,来自莉莉丝科技,我从年开始负责PC端游的开发,年非常荣幸的进入莉莉丝科技,参与了《刀塔传奇》的开发,这是我开发的第一款手游,非常的高兴。下面给大家分享一下《刀塔传奇》客户端技术经验。

首先介绍一下《刀塔传奇》的一个客户端的整个结构,我们在Cocos2d-x下面分装了一个数据模块,一个是数据模块,还有一个网络模块,最大的一块就是业务逻辑模块,里面分UI系统、战斗系统和事件系统,大家玩的游戏都是通过这些模块搭建起来。

我们这个模块除了Cocos2dx是在C++层面实现的,《刀塔传奇》很大程度上都是通过Lua实现的。

开发效率

Lua是一个小巧的成本语言,它的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。它有以下几个特点。

一个是轻量级,官方版本只提供了一个精简的核心和最剧本的库,因此Lua体积小,启动速度快,因此非常适合嵌入在别的程序里。

二是可扩展性,Lua并不象其它许多"大而全"的语言那样,包括很多功能,比如网络通讯、图形界面等。但是Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能。

三是非常容易上手,而且简单灵活,这一点对用户有帮助,因为它学习比较方便,操作灵活。

Lua是一门解释性语言,没有编译和链接生产二进制代码的过程,它是由lua虚拟机直接解释执行的。开发中,修改完代码后,直接运行程序即可看见效果。因此可以节省大量的开发时间,项目越大,效果越明显。

刀塔传奇支持游戏过程中动态加载lua代码,省去重新打开程序的时间。我们在脚本层封装了一个reload函数,用于在游戏运行时重新加载lua代码,实现原理也非常简单:先将先前required过的module从删除,然后重新require该所有module,相当于重新初始化脚本代码。这样我们又省去了关闭和重新打开程序的时间。刀塔传奇的UI场景是使用cocos2dx的场景scene,并在脚本层维护了一个scene的stack,reload的时候将原先的scene先pop,然后使用reload后的代码和资源重新创建新的scene,还原原先的场景,省去了重复操作的时间。

版本更新

除了开发效率,Lua给我们《刀塔传奇》带来的好处就是版本更新。版本更新是手游上市之后的非常重要的环节,直接影响到手游产品的质量。手游版本的更新比PC更加的恶劣,因为iOS的AppStore有一段忽长忽短的审核期,而Andriod更糟糕,渠道众多,版本分发流程复杂。刀塔传奇在立项的阶段就考虑到版本更新的问题,程序的整个框架也给版本更新带来一些便利性。

1) 线上热更

loadstring:功能非常简单,效果非常明显。先前做PC游戏的时候,每次发现线上紧急问题,采取的办法都是紧急停服,然后出更新包,测试,发布,周期长,体验差。曾经无数次线上紧急问题都是通过这个方式修复

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

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

2)游戏内更新包

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

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

3)全量包更新

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

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

调试问题

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保存。

我的分享结束,谢谢大家!

相关文章

2012新开复古传奇(复古传奇新开网)

复古传奇绿色版:新区开区,,四个版本供你选择!最正宗的复古传奇多版本传奇千千万,唯有复古得人心。相比大家已经知道小编要介绍哪款传奇了,没错就是这款复古传奇多版本。喜欢玩复古类型的不二之选。复古传奇多版...

stanley博士的家(stanley博士的家1)

Flash游戏《Stanley博士的家》的兴与衰Flash时代名作消失史。十多年前,新的社交媒体尚未诞生,人们还热衷于装扮QQ空间的时候,大家多少曾在主页看到过各种“诱导点击”式动态:比如一个可以跳转...

洛克王国牵线木偶(洛克王国牵线木偶打混乱木偶)

乔姆斯基:可选择的道路并不多,我选择“乐观而不绝望”诺姆·乔姆斯基,生于年月7日,美国语言学家、哲学家,麻省理工学院语言学荣休教授。作品包括《现代希伯莱语语素音位学》《句法结构》《支配和约束论集》等。...

休闲游戏排行榜(休闲游戏排行榜前十名不用登录的)

休闲游戏哪个最好玩 十大必玩休闲游戏排行榜探寻休闲游戏的乐趣巅峰?休闲游戏哪个最好玩 十大必玩休闲游戏排行榜带你领略精彩纷呈的游戏世界。无论是消磨时间还是寻找乐趣,这份精心挑选的排行榜将揭示那些轻松上...

无限马里奥兄弟(超级马里奥兄弟无限命)

《超级马里奥兄弟》评测7分 老司机更容易翻车“马里奥”这个IP经过几十年的发展,衍生出许多不同玩法,从最经典的横版过关到RPG、ACT。任天堂还为其制作了不少多人游戏,像是《马里奥卡丁车》、《马里奥派...

魔域2 4无敌版(魔域2.4无敌版带什么宠物)

魔域变态版为何骂声一片?打不过正版属实是自己太烂了在手机游戏迅猛发展的时代,市面上出现了各种各样手机游戏,但是有一类网游一直活跃在各种手游推荐的前列,没错!就是各种所谓的变种版游戏,包括传奇、奇迹、魔...