RSS订阅 | 欢迎投稿
您的位置:网站首页 > 热血传奇私服 > 正文

看玩传奇私服已经的那些"坑"

作者:admin 来源: 日期:2016-9-10 9:50:33 人气: 标签:

  为领会决draglist衬着效率低下的问题,添加了可见性裁剪的功能,将不在显示区域的item项设置为不成见。第一版的做法是通过通过lua导出接口,在lua层实现裁剪,确实削减了drawcall的挪用,不外却添加了cpu的承担,次要是由于发生了大量的lua挪用导出接口缘由。第二版就间接在node层面上现实主动裁剪,在visit的函数里面判断能否可见。

  除了常规的print和log的方式,传奇利用lua的debug库开辟了一个DEBUG函数,感化雷同ide下面的断点。该函数会先输出当前的挪用仓库,并进入轮回期待用户输入调试语句,在该形态下,通过debug库供给的getinfo等函数可查看指定level仓库下的local和upvalue。

  看玩传奇私服已经的那些"坑"他们选择的是Cocos2d-x连系玲珑高效的Lua,它提高了开辟效率,敌手游面对的复杂版本更新问题也颇有助力。

  好比:“传奇是在win下面开辟,晚期经常碰着一个问题就是开辟下面功能都ok,可到版本一发布,在手机就各类不合错误,也不晓得是哪里错误。”他们利用错误消息框的体例来处理这种调试问题。

  起首引见一下《传奇》的一个客户端的整个布局,我们在Cocos2d-x下面分装了一个数据模块,一个是数据模块,还有一个收集模块,最大的一块就是营业逻辑模块,里面分UI系统、战役系统和事务系统,大师玩的游戏都是通过这些模块搭建起来。

  利用lua开辟也会具有内存泄露的问题,snapshot能够对当前的LuaState做一个完整的快照,并记实对象的援用关系,我们能够在分歧的手机端对Lua进行两次快照,通过两次的对比能够的出新添加的内存处于何处。

  留意:用loadstring只能笼盖全局域下面能拜候到的函数,从法式设想方面来说,一个模块该当对外尽可能少的接口,可是从线上热更来看,该当让全局域下面能拜候到尽可能多的函数,如许能够提高线上热更代码的笼盖率。

  我们还做了一个游戏错误框,雷同如许的结果图。我们《传奇》是在PC下面开辟的,等版本发布出来,到Andriod、iOS一跑就各类问题,也不晓得呈现了什么问题,然后到各类下面去查很是的麻烦。然后我们就在手机发布去添加了这么一个框,当有错误的时候它能够以这个形式展示过来,我们在发布内部的测试版方面,我们发这么一个框,能够很容易的定位到手机版本的问题,他们提交的bug单能够让我们找到错误的消息,这对bug来说是很便利的工作。

  传奇支撑游戏过程中动态加载lua代码,省去从头打开法式的时间。我们在脚本层封装了一个reload函数,用于在游戏运转时从头加载lua代码,实现道理也很是简单:先将先前required过的module从删除,然后从头require该所有module,相当于从头初始化脚本代码。如许我们又省去了封闭和从头打开法式的时间。传奇的UI场景是利用cocos2dx的场景scene,并在脚本层了一个scene的stack,reload的时候将原先的scene先pop,然后利用reload后的代码和资本从头建立新的scene,还原原先的场景,省去了反复操作的时间。

  Snapshot:处理Lua脚本内存泄露

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

  除了开辟效率,Lua给我们《传奇》带来的益处就是版本更新。版本更新是手游上市之后的很是主要的环节,间接影响到手游产物的质量。手游版本的更新比PC愈加的恶劣,由于iOS的AppStore有一段忽长忽短的审核期,而Andriod更蹩脚,渠道浩繁,版天职发流程复杂。传奇在立项的阶段就考虑到版本更新的问题,法式的整个框架也给版本更新带来一些便当性。

  这是传奇的常规更新体例,一般用来更新大特征版本。更新的内容包罗lua脚本,美术资本,筹谋资本。因为代码都是lua脚本,更新完成后,能够通过从头初始化整个luastate,达到更新包在游戏运转时生效。

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

  开辟效率

  版本更新

  这个是我们最不情愿采用的版本更新体例,有一些时候不得不消。好比《传奇》方才上线的时候跨服蓝牙仓库功能。

  Lua是一个玲珑的成本言语,它的设想目标是为了嵌入使用法式中,从而为使用法式供给矫捷的扩展和定制功能。它有以下几个特点。

  《传奇》是张振新与团队从端游转入手游开辟的第一款产物,在他的中,还提到一些浩繁草创手游团队可能城市碰到的“坑”。

  机能问题

  3)全量包更新

  错误提醒框

  大师好,我叫张振新,来自莉莉丝科技,我从2009年起头担任PC端游的开辟,2013年很是侥幸的进入莉莉丝科技,参与了《传奇》的开辟,这是我开辟的第一款手游,很是的欢快。下面给大师分享一下《传奇》客户端手艺经验。

  Lua的开辟者经常会碰着的感受,就是开辟效率极快,一会儿做起来了,可是出格的坚苦,此中很主要的缘由就是调试坚苦,很难找到bug。

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

  留意:更新包不克不及用于处理更新流程之前的bug;当一个版本有持续几个比力大的更新包之后,能够考虑出一个非强制更新的全量包给到渠道,如许有助于提高新进玩家的率。

  2)游戏内更新包

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

  调试问题

  这边每个数据跟大师分享一下,每次完整包更新的时候,当日的日活跃大要会少10多万。它的优化方案,制造低清版本,处理包大小的问题,还有一种是在游戏内预备承继一个下载器的功能,就是在游戏启动过程傍边,跟游戏更新包雷同,在游戏启动过程傍边完成一个全量包的下载和安装,达到优化更新体验的目标。

  对table事后分派大小,削减rehash。

  更多张振新的分享,见以下拾掇内容。

  loadstring:功能很是简单,结果很是较着。先前做PC游戏的时候,每次发觉线上告急问题,采纳的法子都是告急停服,然后出更新包,测试,发布,周期长,体验差。已经无数次线上告急问题都是通过这个体例修复

  一个是轻量级,版本只供给了一个精简的焦点和最脚本的库,因而Lua体积小,启动速度快,因而很是适合嵌入在此外法式里。

  传奇在法式启动的时候,会从办事器拉一段代码下来,然后施行这段代码。因为这个逻辑是在发生在lua代码加载之后,于是就能够用拉取下来的代码段笼盖版本里面的lua代码。

  三常容易上手,并且简单矫捷,这一点对用户有协助,由于它进修比力便利,操作矫捷。

  它在第一行做了一个快照,分派了一个Test1,然后他又做了一个S2,这对我们定位的内部发生了斜都有很好的处理。出格是对Lua问题发生的不容易发觉的,通过添加这种体例能够处理。

  二是可扩展性,Lua并不象其它很多大而全的言语那样,包罗良多功能,好比收集通信、图形界面等。可是Lua供给了很是易于利用的扩展接口和机制:由宿主言语(凡是是C或C++)供给这些功能。

  1)线上热更

  Lua是一门注释性言语,没有编译和链接出产二进制代码的过程,它是由lua虚拟机间接注释施行的。开辟中,点窜完代码后,间接运转法式即可看见结果。因而能够节流大量的开辟时间,项目越大,结果越较着。




对于复制转载文章申明:为了尊重著作人的成果,复制本文内容请带上来路地址,www.shunlo.com 谢谢!
读完这篇文章后,您心情如何?
0
0
0
0
0
0
0
0
本文网址:
下一篇:没有资料