【微信小游戏】游戏性能检测

白鹭cost

cost的两个因素有必要理解下,对于性能的检测很有帮助

1、代表每帧代码支出时间(ms)

2、代表每帧draw(绘制)花费时间

对于小游戏的检测,可以简单的看下cost的两个数值,然后问题可以侧重在cpu的运算上还是绘制上了。同时这两个数值相加,最好不要超过每帧的耗时。

文本和位图的问题

说到底就是矢量图【文本是矢量图,在有的地方不是,至于这方面的知识点,反正我是不知道在哪里看到过】和位图的问题

先复制一下知乎上,关于矢量图和位图高赞的一个回答:

矢量图和位图的对一块区域的渲染的「描述方式」是不同的:

位图定义了区域内每个位置的颜色值;

最传统的矢量图SVG实际上是一种XML格式,是通过「路径」和「填充颜色」来描述渲染的。由于「路径」在缩放的情况下并不会失真,因此矢量图具有不失真的特性。

因此,在「对像素的控制」上,矢量图是无法和位图相比的(位图是精确控制),所以大家会说「矢量图的表现力不如位图」。

在简单图形的情况下,矢量图的文件大小是比位图小的。但是,如果是更加细致的图像,矢量图的「路径」就会越多,路径信息量会膨胀得很快。

这种膨胀,不仅是文件大小膨胀,还有对渲染能力要求的膨胀。

另外,位图处理其实已经成为一种标准化流程,可以硬编码到显卡内,显卡就是专门为了处理位图而存在的。

而矢量图其实还不存在一种标准格式和标准处理流程,主要有SVG和Adobe Flash。因此处理矢量图只能靠CPU。

在我们项目中,文本带有如下特性:

    1、主界面10多个变更频繁

    2、size>=26

    3、带滤镜

    4、超大数类型,数字显示类似999.99bb

之所以想换为位图,有如下考虑:

1、安卓系列手机对滤镜的支持,丧心病狂般的辣鸡,你的滤镜来多几个,说不定直接拖垮游戏。

2、游戏类似于切水果,彩虹岛,这种操作界面游戏,文本大量频繁变更是很没必要的,在上面的4中,有可能长期处于一个不变的数字但数字在改变的状态,这时候用图片可以很明显减少drawcall。

我们还有一个场景是升级的界面,因为不频繁改变,所以用的是文本,不过在等级特别高的情况下,我升级也是很卡,不知道是不是这方面的问题,待我文章写完,再去测试下。

3、之前做过的H5游戏,已经有血一般的教训,所以直接用位图代替了。

游戏闪屏

一直觉得轻量级的为微信小游戏,不应该会闪退但现实就这么残酷,第一次测试就把一台挺新款的vivo给闪退了,一看到闪退,那内存准爆胎了。内存爆掉的情况

可能如下:

1、滑动过程中,不断new image

2、新建的图片不断用tween动画

3、苹果系统划线的过程中不断创建shape,安卓系统不断创建纹理。(不同系统由于微信小游戏支持不同,需要采用两套划线方式)

4、成功触碰会导致频繁调用音效(由于不同系统白鹭的音效会出现问题,懒的去解决,也写了两套)

以前总觉得小游戏,产生的对象不是那么多,同时小对象应该无伤大雅,对手机的影响不大,但现实啪啪啪之后,还是乖乖的做出了修改:

1、给飞来飞去的image一个对象池,这个对象池只是针对这个image的对象池,其它功能的image不回收到这个对象池。

2、在测试中,tween在性能占据上,真的可以忽视掉,反正我是没处理掉,如果有效果,希望有人能够说下,这样我再给这货个对象池。

3、好吧,给shape一个对象池吧,浪费是一种可耻【这是苹果系统的】。安卓系列的将纹理设置为私有变量,每次drawToTexture吧【其实奔溃主要是在这里】

4、音效这里不会导致奔溃,但是特别耗cpu,之后说。

总结起来就是一些小对象确实是可以肆无忌惮的挥霍创建,但作为前端,在渲染系列对象的创建上是能省则省,虽然纹理看上去人家继承的HashObject,且只有什么x,y,但renderT人家好歹带有绘画功能。

你可能感兴趣的:(游戏)