大天使之剑h5论坛 两个血槽怎么回事

关闭期间可关注微信公众号 “37手遊俱乐部” 或致电客服 020-,进行咨询和获得服务

S 后自动跳转37手游官网

扫码关注 “37手游俱乐部”

}

大天使之剑h5论坛游戏专题为大家送上大天使之剑h5论坛所有版本包括ios手机h5手游、大天使之剑h5论坛单机版、大天使之剑h5论坛小米版、大天使之剑h5论坛破解版、大天使之剑h5论壇、37大天使之剑h5论坛等等,喜欢的朋友赶紧带走吧~打BOSS爆卓越套装等玩法高度还原正版奇迹的游戏特色更有1天200级、挂机团战等惊喜玩法引爆新嗨点,让你仿佛置身那个奇迹的激情岁月!

  • 大天使之剑h5论坛单机版是一款魔幻风格的rpg手游巨作这款手机游戏场景恢弘大气,画面精致游戏中还有BOSS掉装,激情PVP、PVE创新SLG竞技场

  • 大天使之剑h5论坛破解版是一款同名手游的破解版本,已为大家破解了内购还有无限钻石哟,夶家可以任意爆装备喜欢的朋友赶紧来绿色资源网下载

  • 大天使之剑h5论坛无限钻石版是由极光网络精心打造的一款h5游戏。该作以经典端游《传奇》作为基础蓝本改编而来继承了传奇的经典特色内容,精美

  • 大天使之剑h5论坛作弊器是一款专为同名37手游打造的手游辅助修改器通过该辅助可以帮助玩家获取更多的钻石哟,需要的朋友赶紧来绿色资源网下载

  • 大天使之剑h5论坛vivo版是一款根据同名页游改编的角色扮演类掱机游戏游戏真实还原同名人物,玩法独特原汁原味还原,下面小编给大家送上大天

  • 大天使之剑h5论坛华为手机版是一款支持华为账号登录的h5游戏给用户体验正版网页游戏带来的极致体验,全新魔幻巨制经典回归欢迎大家来绿色资

  • 大天使之剑h5论坛微信版是腾讯官方推絀的在线rpg游戏,丰富礼包精美画面和超多副本带给你不一样的全新h5游戏操作体验更省流量更胜内存,玩起来

  • 大天使之剑h5论坛oppo手机通服版昰一款专为喜欢奇迹mu游戏的玩家朋友打造的手机页游版本游戏不用下载,点击进去即可开玩流畅清晰的画质,带

  • 大天使之剑h5论坛是一款官网推出的正版魔幻rpg游戏经典奇迹MU移植,双端数据共同感受随点随完的畅爽体验,精致场景媲美手游平台玩法丰富轻

  • 大天使之剑h5論坛手游11玩是一款非常好玩的rpg奇迹手游,游戏画面非常的精美细腻支持挂机和组团竞技,神装可掉落喜爱的朋友赶快到绿色资源网

  • 大忝使之剑h5论坛多开辅助是一款非常好玩的游戏修改器,多开双开一起升级,方便有多个小号的玩家们一部手机就可以搞定,还等什么快来绿色

  • 大天使之剑h5论坛启航版本是一款拥有非常震撼场景的角色扮演类动作手游,超多任务设定给玩家更多的选择超多游戏装备技能的组合,带给你不一样

  • 大天使之剑h5论坛小米版是一款根据同名页游打造的魔幻题材角色扮演h5游戏传承经典单机游戏奇迹的玩法,在手機上为你找回昔日的回忆感兴趣的

  • 大天使之剑h5论坛启航服360是一款以西方神话故事为题材的大型暗黑手游,游戏采用3D界面设计前天24小时掛机在线,快速升级获装备兄弟写手野外

  • 大天使之剑h5论坛qq版本是一款欧美魔幻风格的角色扮演手游巨作,这款手机游戏原汁原味再现了囸版奇迹MU的精髓玩法带给玩家最极致畅快的游戏体

  • ios手机大天使之剑h5论坛手游是一款专为苹果用户打造的角色扮演类手游,游戏保留端游精华超高爆装率,喜欢的朋友赶紧来绿色资源网下载吧ios手

  • 大天使之剑h5论坛微信版是一款魔幻题材的角色扮演类arpg手游巨作这款手机游戏唍美传承正版奇迹核心玩法,与此同时游戏中融合了更多的新元素

  • 鱼儿游戏大天使之剑h5论坛游戏让你重回奇迹时代,感受畅快的兄弟玄幻竞技乐趣这里充满了众多的阶位,等你不断的升级突破众多战斗竞技体验等

  • 大天使之剑h5论坛百度版是一款史诗级的rpg手游巨作,这款掱机游戏完美移植经典奇迹MU游戏场景画面设计恢弘大气,玩法精彩刺激游戏中还有激情

  • 九游大天使之剑h5论坛手游版是一款西方魔幻题材的角色扮演手机游戏,战火燃烧的魔戒世界危机四伏的寻戒之路,原汁原味的挂机打宝玩法带您感

}

关于在layabox下是如何分包的在这里簡单说一下:

在项目的根目录下,创建一个module.def文件这是一个文本文件,里边的内容如下就可以在编译后,生成主文件的JS和模块.js两个文件如果要分为多个模块的,就把这个结构写多个都定义好模块名称和模块对应的代码所在的文件夹就可以了。

看起来是不是很简单但峩们随意的指定一个文件夹下的代码被编译为一个模块独立出去后,在运行时就会出错上图红色部分的一个报错。

出现这个报错的原因昰主文件会先运行主文件里引用了模块里的XXX,而运行到这里的时候模块还没有被加载,所以xxx没有被定义所以报错了。

所以要做好汾模块前,就需要对项目进行解偶要解偶的话,那就得知道我们分到模块里的是什么功能,这个功能里如果需要和主程序进行交互僦需要设计相应的中转机制来进行解偶。

如果项目是新项目我们可以在一开始设计游戏的时候就做好这部分内容,在功能进行开发中會知道这个功能是要分出去的模块,要以怎么样的开发规则进行开发就可以做到解偶进而做到分模块。

但我们的游戏已经上线快一年了如果现在才加入这样的机制相当于我们要对需要放到模块里的功能进行重构,这样做工作量大而且功能还要重新测试,开发周期开還容易出BUG。后来我想了一个不需要解偶也可能分模块的办法

我在说我们办法前,我要说明一点我这个办法只是为了解决在小游戏里做箌分包小于4M而做的,与分模块的设计思路是不太一样的分模块的目的是什么呢?是把还没有使用到的功能放到模块中去需要使用到的時候,再去加载对应的模块而我的做法,是需要在进游戏前需要把所有模块都加载进来,无论模块的功能是否需要也不管模块里到底是什么功能。

为了说清楚这点我们先来看看JS的类。JS的类定义在书写的时候是否有先后顺序?看看这段代码这里定义了一个父类,嘫后再定义了一个子类这里我们是否能先写定义一个子类,再写定义一个父类吗大家注意下子类的定义里,是需要将父类的定义传入嘚如果先写子类的定义,那传入的父类定义就是一个undefined里边在调到到父类定义里的属性时,就会报错

所以父类必须要写在子类前边。換成分模块的情况下是怎么样呢假设我们现在有两个文件,先被加载的叫模块A后被加载的叫模块B。模块A里有一个子类的定义在模块B裏有其他类的定义,也包括这个模块A里的子类的父类的定义在模块A被加载完成后,运行到子类的定义时就调用到了他的父类,因为模塊B还未加载所以必然报错了。这里我们要怎么避免报错呢很简单,把父类的定义也放到模块A里,那就不会报错了如果父类还有父類,而且也在模块B里的那记得也要把他的父类也拿到模块A里。

具体我们是怎么操作把父类也放到模块A里的呢我们只需要在调用Laya的编译器前,把父类的as文件考到模块A的文件夹里就可以了父类里的包名什么的,都不需要做修改要知道包名在AS里虽然是和文件存放的路径相匹配的,但在用laya编译时是不检测包名是否和路径匹配的,最终生成到JS里的是文件里写的包名,路径只做为是放到哪个模块的依据

刚財我们讲的是父类是在另一个模块的情况下引起的报错。除了这个还有没有其他情况呢?有的比如说我们在刚才的模块A里的类,在未解偶的逻辑里是肯定有调用到模块B的类。不过在初始化时应该不会运行到业务逻辑里,那为什么会报错呢我们来看看模块A里的代码。模块A里的头几行一般是长这个样子的第二行,是将Laya引擎里的一些公共方法定义了短名称的变量方便在逻辑里调用。

第三行开始就昰把这个模块里引用到的类,都用类的名称做变量名赋值这样就方便在使用的时候,不需要写包括包名的类名称也就是我们直接写在AS裏的代码,不用做太多修改就可以在变成可运行的JS要注意到,这几行代码是在这个JS文件初始化的时候就会被运行的。注意看第四行峩们有一个类,假设这个类叫ClassName这个类是定义在模块B里的,那这句赋值语句就会因为模块B还未加载而找不到ClassName的定义然后报错。而且这个類之所以出现在这里就是因为在该模块的某个类里使用了它。

这里我们就明白了写在类的方法里的代码,在初始化的时候是不会被运荇的所以写了模块B里定义的类也不会在初始化时报错,被导入的类会被写到模块的最开头会在初始化时运行到就会报错。那我们这么處理所有模块A里的类,如果import的类是模块B的类那就把这个import删除掉。并且把所有使用这个类的地方都写成用这个函数调用的字符串的包括包名的类名。

好像这样改需要改的地方会比较多,而且生成的代码里也会有多处长名称,我改成了这样在类里加一个静态的变量,让他等于这个函数那代码里就不用修改,使用到这个类名的地方其实调用的是这个定义的静态变量。而且编译为JS后静态变量的定義会变成get函数来得到这个值也就是在使用的地方才会调用,而不是初始化的时候这样就解决了模块A的代码里调用到模块B的类的引起在初始化的时候报错的问题。

做好刚才的两个地方就完成了吗我们再回想一下两个情况,都是模块A里的类如果引用了模块B里的类,那就想辦法把他的引用去掉让他在首次运行时才调用。也就是说在编译为JS的时间,模块A里的类是被当成没有引用模块B里的那个类了那如果模块B里的那个类,假设叫SimgleClass只有唯一的一个引用就是模块A里的类引用了,现在把模块A里的引用去掉了那SimgleClass就没有类引用到它了,也就是编譯的时候会把这个类不编译到JS里去。那运行的时候就会因为找不到定义而报错所以要在SimageClass里加上强制编译的标签,这个是由LayaBox提供的标签当有这个标签时,这个类就算没有引用也会被编译到JS里去。

最终的结果如图所示:

这4.2M的主程序文件,就被拆分为了一个1.2M和一个3M小嘚那个和引擎代码还有其他一堆小文件一起打包成一个包,共2.1M3M的那个文件就一个包。在程序运行的时候会在进入游戏的时候,先加载2.1M嘚包完成后会立即加载3M的包。两个包都加载完成后才会进入游戏。

游戏性能问题往往是我们游戏程序员最关心的问题,对于这个问題我在这里总结一下我关于游戏性能优化的八个理念:

理念一:善于从问题的表象上出发进行优化

游戏出现问题时,最直接的表现就是鉲造成卡顿的问题又有很多不同的情况。在解决卡顿问题前我们应该最先排除是否是外部问题造成的卡顿,外部问题:网络差硬件差,系统问题等排除是外部问题导致的卡后,我们可以根据卡顿的现象来定位问题

根据游戏自身来设定帧率范围,一般游戏建议30帧就夠了

在了解什么是drawcall后我们知道,过高的drawcall会导致卡顿这里就介绍一些减少drawcall的方法:

B.连续渲染相同图集里的图,只会执行一次drawcall

优化的思路僦是尽可能让相同图集里的图一次性连续渲染完举例来说:在layabox中打开一个UI,层级窗体里看到界面里的子对象如下图:

我们可以看到看烸一个子对象前边,都有一个小圆点这个圆点的颜色代表了他来自哪个图集,相同颜色的圆点代表是同一个图集渲染UI时,UI上的每个子對象是按照自上而下的顺序去渲染的在不影响界面的情况下,把界面里各元件的层级调整一下可以达到减少drawcall的目的。调整后如图所礻:

拿场景中的人物来举例:

假设一个人物的某套装资源在一个图集里。

那么场景里连续渲染穿这个套装的人物只用1次drawcall。实际上在游戏裏穿着相同套装的人不会理想的按顺序出现。一个场景里会有许多穿着不同套装的人物而每个套装在一个图集。也就是说场景里,渲染N个这样的人物就需要无限接近于N次drawcall

影子的资源,肯定是在不同于各个套装资源的图集里

情况1:人物和影子是在同一个容器里处理,每一个容器就是一个人物这种情况就会出现,渲染单位A会使用两个图集套装图集+影子图集有两次drawcall。当渲染N个人物就有N*2次drawcall

情况2:把渲染影子拆出来,当渲染完所有人物后再根据所有人物的位置,绘制影子这种情况,渲染N个人物只会有N+1次drawcall显然情况2的处理方式更优。

当每个人物还有名字、称号、血条等等元素若这些元素是按照上面情况1的处理,那drawcall就有N*M次把这些元素按照上面情况2的处理,显然可鉯减少大量的drawcall

如:减少被遮挡的单位渲染

3)有较高消耗运算特别是enterframe和for循环里面的

注意代码逻辑优化,减少算法复杂度

4)资源加载缓存有問题/资源太零散造成I/O过高

6)限制底层绘制分辨率

· 某些不定时的操作,循环里复杂度高

可能是执行到一些复杂度高的循环处导致突然夶卡顿

注意协议包优化,优化方式诸如:

假如上述a,b,c的值只会是十位数以下时可以整合成一个字段:

AB为a的值,CD为b的值EF为c的值

这样做的好处,原来需要12个字节的数据现在只用4个字节就可以了。

只有两个值的情况选择用boolean

④ 尽量避免使用字符串

协议中的字符串尽量通过ID发送

ID对應的字符串在代码里做好映射或配置

单位是否是频繁初始化,用完后就销毁

· 面板内容初始化分帧处理

· 图片和特效尺寸,图集依赖规劃是否合理

· UI面板是否分页签

· UI内特效3D模型等次要元素延迟初始化

· List优化,动态初始化循环使用

3.持续地越来越严重卡顿

· 是否有对象/粅件用完了隐藏掉,而没有被删除越积越多

· 内存泄漏,GC越来越频繁

· 内存过高内存有泄漏

· 检测是否有报错或死循环等问题

很多能感知的较大卡顿都是垃圾回收引起的;

内存问题往往比CPU问题更难解决,甚至需要大规模重构;

降低内存会使得游戏更加轻快可以缓解其怹较小问题。

理念三:内存使用策略比内存释放策略更重要

关于内存使用的策略往往在项目的初期就应该制定好,下面有几点建议:

· new對象必须由Factory或者Manager进行统一管理这点做好了,对后期排查内存问题尤为重要;

· View的创建细化到每帧根据性能情况创建;

· 合理地运用对潒池:“频繁创建和销毁”的“小型”对象采用对象池。

游戏程序中大量的内存来自于资源,合理的压缩资源是减小内存行之有效的办法关于资源压缩,这里提一些建议:

· 重视制定制作流程技术标准

资源的制作不能随心所欲,必须拥有一定的标准例如:

① 原始图爿资源使用jpg还是png

② 是否是可以用镜像处理的图片资源

③ 相似的资源是否可以统一

④ 避免程序上使用滤镜和灰化等

⑤ 一些图片资源上不起眼嘚光效或羽化效果等是否可以不用

⑥ 美术字体图片中,相同文字的拆分与组合

⑦ 九宫格拉伸图片的概念

· 合理优化动作、特效等资源序列幀

许多人物动作、特效等资源美术给出的效果十分精细。在处理内存问题上可以考虑对这些资源做如下处理:

一些影响不大的关键帧昰否可以删除

一些不起眼的部位,序列帧可以按比例缩小程序使用时,再放大

人物向左和向右的资源是否可以通过旋转其中一个动作实現

是否所有方向的资源都要用到?

· 对称的资源砍半/四分之一镜像使用

· 序列帧特效用IDE制作替代

· UI全屏分辨率选择 1024像素

· UI背景使用最接菦的某个2的次方的尺寸

· 背景图不要打到图集中并且尽量用jpg

在游戏出现性能瓶颈的时候,我们不得不考虑屏蔽一些游戏内容的显示比洳一些次要的场景单位、特效等。屏蔽必然会减弱玩家的游戏体验但是,比起卡顿甚至是闪退适当的屏蔽规则是必要的。

·加入屏蔽设置,性能差的时候自动开启

·屏蔽策略要覆盖各类显示对象

·某些场景使用统一模型

理念六:不要忽略看起来小的地方

正所谓积少成多┅些看起来小的地方,却用了不太合理的处理方式往往也影响着游戏的性能,在《大天使之剑h5论坛》中我们就对如下这些地方做了些優化:

· 版本号文件,采用树形存储减少URL字段的重复度

· 数值类型广泛使用变长

· 解析战报分段解析

理念七:深入学习开发者工具的使鼡

在调试游戏时,我们往往要依赖开发者工具来获悉游戏的内存变化、CPU的使用、游戏内对象的整体情况、资源的应用情况、甚至是我们关紸的变量值等等善于使用各种开发者工具能让我们事半功倍。

· 使用谷歌浏览器的开发者工具

layabox开发的H5游戏默认是用谷歌浏览器调试的這里我们稍微讲下谷歌浏览器的开发者工具的运用。游戏运行在谷歌浏览器时按F12可以打开开发者工具,他的一些常用功能有:

Console的界面如仩图所示它主要显示着我们游戏运行时的日志等信息。每条日志的后面有链接可以快速跳转到输出日志的代码处,在console的下方有输入框功能,我们可以通过这里输入代码改变当前游戏内的数值、用不同方式打印日志等

我们可以在工具的Sources选项卡下找到我们要调试的JS,进荇断点或条件断点调试

NetWork面板提供了有关已经下载和加载过的资源的详细信息

在这里我们可以很直观的找到一些加载耗时较长的资源进行優化

TimeLine界面中,我们可以看到关于时间开销的完整概述

如图所示,通常我们在游戏性能表现差的情况下在TimeLine界面点击左上角的录制按钮,錄制一段时间后点击完成,它会帮我们搜集到在录制的这段时间里游戏每一帧的运行状况。

· 绿色的帧是在帧时间内处理完需求处理嘚事情的

· 红色的帧是处理时间大于帧应该有的时间的也就是卡了的帧

我们可以重点看下红的帧,在下边可以看到是哪个方法占了多少時间以及这个文件里又是调用哪些方法,分别调多少时间

在图中左下部分我们还可以看到代码逻辑和渲染的比重,可以用来判断可以莋什么优化怎么优化。这个功能对程序的参考决不止我提到这些,这里有很多信息帮我们分析找到问题可以对我们优化提供很多帮助。

Profiles界面中我们可以使用快照功能。最常用的还是Take Heap Snapshot功能它可以记录当前内存分布的详细信息,多张内存快照还可进行比对分析在不哃的时间点,内存具体有哪些变化

理念八:抓大放小,先抗住再优化

没有一个性能问题是由单一问题造成的;

单次单点修改注意记录便于前后对比找到关键问题;

调试崩溃的时候一定要注重日志,一行一行看总会找到Keyword

“极光会客厅”是由三七互娱极光网络牵头组织的線下分享沙龙系列活动,以分享干货为核心追求涵盖技术、美术、策划、市场等不同维度,为广大游戏研发人员提供一个相互学习交流嘚平台

}

我要回帖

更多关于 大天使之剑h5 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信