《laya 性能优化》基础性能优化 (不断更新添加)

文本优化

不对文本的属性(例如大小、颜色、粗细、斜体、对齐等等)作出任何改变的话。那我们可以使用changeText()来替换文本

文字描边少用,设置了描边的文本比没有描边的文本多调用一次绘图指令

加载优化

自定义worker,解决项目中耗费CPU的地方

各个dialog界面资源在打开时再去加载,可以用小加载过渡,一个界面的UI资源放在同一个文件件内

加载后的界面及时清理 Laya.loader.clearTextureRes(urlStr);

 

内存优化

1、对象池优化-----------------------laya.utils.Pool

    static getItem(sign: string): any {}

    static getPoolSizeBySign(sign: string) {}

    static getItemByCreateFun(sign: string, createFun: Function, caller: any = null): any {}

    static getItemByClass(sign: string, cls: new () => any): any {}

    回收同理

    最好上面再封装一层 PoolManager

2、使用Handler.create(使用了对象池)

    可回收,可重用

3、释放内存

    JavaScript运行时无法启动垃圾回收器。要确保一个对象能够被回收,需要删除对该对象的所有引用。Sprite提供的destory()方法会帮助设置内部引用为null。尽可能将引      用设置为null,以便垃圾回收器用较少时间来查找对象

4、资源卸载

    Laya.loader.clearRes(asset);

5、减少使用滤镜,遮罩

    原因:运行时将在内存中创建两张位图。其中每个位图的大小与显示对象相同。将第一个位图创建为显示对象的栅格化版本,然后用于生成应用滤镜的另一个位图,当修改滤镜的某个属性或者显示对象时,内存中的两个位图都将更新以创建生成的位图,这两个位图可能会占用大量内存。此外,此过程涉及CPU计算,动态更新时将会降低性能

6、资源

    图片资源缩小,在程序中放大,可能造成糊的情况,比如非焦点的缩小67%,这样scale设置1.5就是原设计大小了

    资源压缩,图片压缩,android使用ogg格式的音效,MP3的bgm

    动画资源的帧可尽量少,特别是技能的。手机上一闪而过不影响太多效果,图片可以缩的更小。在程序放大即可

    图片为2的整数幂:在手机上,图片传到显存后,宽高会变成2的整数次幂,比如下图很明显,这样会节省很多显存,同理其他资源

优化sprite

减少层次嵌套,减少sprite

非可见区域设置visible=false,比如打开界面的时候,可以把人物以及界面上的特效的visible设置false,可以有效降低drawCall

大量静态或者不经常变化的内容,设置cacheAs  normal\ bitmap

 

catchAs

 normal:减少sprite节点数,Canvas下进行画布缓存,webgl模式下进行命令缓存(渲染命令)。该模式性能优化中等,它能减少每帧渲染的节点数,但不会减少DrawCall数和Shader数

bitmap:减少drawCall和sprite,Canvas下依然是画布缓存,在webgl模式下使用renderTarget缓存,相当于缓存成静态位图提交显卡渲染。这里需要注意的是,webGL下renderTarget缓存模式有2048大小限制,超出2048会额外增加内存开销。另外,不断重绘时开销也比较大,但是会减少drawcall,渲染性能最高

注意:代码中设置cacheAsBitmap=true,实质上等同于cacheAs的normal模式,并不是bitmap模式。当值为”normal”时,Canvas下进行画布缓存,webgl模式下进行命令缓存。webGL下命令缓存模式只会减少节点遍历及命令组织,不会减少drawcall,性能中等。

简单总结:

normal:只缓存渲染命令,会减少 sprite节点数,优化节点渲染,不会增加内存   

bitmap:直接换成成一个静态位图,之后不再提交渲染,所以会增加内存,有效减少sprite节点数和drawCall

/**
 * 指定显示对象是否缓存为静态图像。功能同cacheAs的normal模式。建议优先使用cacheAs代替。
 */
public function get cacheAsBitmap():Boolean {
    return cacheAs !== "none";
}

public function set cacheAsBitmap(value:Boolean):void {
    //TODO:去掉关联
    cacheAs = value ? (_$P["hasFilter"] ? "none" : "normal") : "none";
}

 

降低drawCall总结

  • 尽量保证同图集的图片渲染顺序是挨着的,如果不同图集交叉渲染,会增加DrawCall数量。
  • 尽量保证同一个面板中的所有资源用一个图集,这样能减少提交批次。
  • 程序字在游戏里是会单个字生成图片绘制在动态图集里,所以程序字也是一个图集,把所有的文字统一放在界面最上层可以减少drawcall,根据界面判断
  • 相同资源放在同一个容器(box)下面,比如玩家A.影子.玩家B.影子会生成四个drawCall,修改成 box(影子,影子),box(玩家A,玩家B)就可以减少成3个drawcall,N+个角色就减少N个drawcall
  • 对复杂静态内容设置cacheAs,cacheAs主要通过两方面提升性能。一是减少节点遍历和顶点计算;二是减少drawCall,使用好cacheAs是游戏优化的关键。
  • cacheAs静态缓存:设置cacheAs后,还可以设置staticCache=true以阻止自动更新缓存,同时可以手动调用reCache方法更新缓存
  • 以下场合减少使用cacheAs​: 1、单一图片或者字设置"bitmap"会增加drawCall。 2、容器内有动画等经常变化,可查看统计面板的第一个值(0/0/0)来判断是否一致刷新Canvas缓存

 

CPU优化

  1. 减少动态查找,减少对象上组件的查找
  2. 减少try catch的使用,被try catch的函数执行会变得非常慢
  3. 计时器里尽可能不要在循环里创建对象及复杂计算,比如发射大量子弹
  4. 清理对象时,也要清理其内部的timer
  5. 少用autosize和getbounds,autoSize在获取宽高并且显示列表的状态发生改变时会重新计算,对拥有大量子对象的容器应用autoSize是不可取的
  6. 改变帧率   Stage.FRAME_SLOW维持FPS在30;Stage.FRAME_FAST维持FPS在60;Stage.FRAME_MOUSE则选择性维持FPS在30或60帧。推荐使用Stage.FRAME_MOUSE
  7. 使用callLater  callLater使代码块延迟至本帧渲染前执行
  8. 图片/图集加载  资源按照关卡,场景等分类加载,使用后卸载
  9. 一帧只计算一部分,放到一个待计算列表里,每一帧,只拿出若干个进行计算,这样有的怪会晚几帧才会飘出伤害,在视觉上是没有区别的。但就不会在释放技能的时候卡一下。
  10. Laya.Stage.getTimeFromFrameStart:获得当前时间距离当前帧开始时间的差值,可以设置阈值将剩余的事情放到下一帧执行
  11. 重写 View.createView  可以设置一次只加载一部分,比如背包先加载背景-道具底栏-道具等做法

显存优化

图片纹理压缩

png/jpg需要cpu解码成纹理,才能被GPU使用

使用charome性能分析器

Network:查看资源下载速度

performace:解决性能瓶颈,查看山峰图的情况,以此判断出卡顿情况或者update处理事件过长

Memory:查看是否存在内存泄漏,   连续15分钟+变卡的游戏大部分都是内存泄漏造成的

 

 

 

 

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
LayaSpine 是一个基于 LayaAir 引擎的插件,用于在游戏中实现骨骼动画效果。在开发中,对骨骼动画进行优化非常重要,这样可以提高游戏的性能和用户体验。 首先,优化骨骼动画的关键是减少渲染的负担。可以通过以下几种方式来实现: 1. 减少骨骼数量:如果骨骼数量过多,会增加计算和渲染的负担。合并一些相似的骨骼可以减少重复计算的次数,提高效率。 2. 控制动画帧率:动画的帧率越高,渲染压力就越大。在不影响动画效果的情况下,可以适当降低帧率以减少计算量。 3. 精简骨骼的节点层级:减少骨骼的节点层级可以简化渲染过程,加快渲染速度。 其次,合理利用缓存和资源管理也是优化骨骼动画的重要手段: 1. 使用纹理缓存:将频繁使用的纹理缓存起来,避免重复加载和释放,提高渲染效率。 2. 预加载资源:提前加载骨骼动画的必要资源,以减少运行时的加载时间,提高游戏的响应速度。 最后,对于移动设备上的优化也是必不可少的: 1. 避免频繁的骨骼动画切换:频繁的骨骼动画切换会增加 CPU 负荷,导致性能下降。在设计游戏时,应尽量避免过多的动画切换。 2. 使用脚本控制动画播放:通过代码控制动画的播放,可以根据需要启动、暂停或跳跃到指定的关键帧,提高动画的表现力和性能。 通过以上的优化方法,我们可以有效地提高 LayaSpine 动画的性能和效果,使游戏更加流畅和精彩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值