- 当前 Bug 的表现(可附上截图)
Android系统上,小游戏刷新内容时,如果不进行清除操作,可以看到canvas内容被循环绘制了多次。不知道这是SurfaceView的问题还是微信内部的Bug。理论上这会造成相当严重的性能和功耗损失。另外canvas初始内容也很奇怪。似乎每帧都在重新为canvas申请内存。
- 预期表现
canvas内容只在正确位置绘制一次。确保canvas除非必须,不申请新内存。有可能的话,canvas最好能保留上次绘制的内容。
- 复现路径
- 提供一个最简复现 Demo
var canvas = wx.createCanvas(); var ctx = canvas.getContext( "2d" ); var info = wx.getSystemInfoSync(); var x = 0; function render() { ctx.clearRect(0, 0, 5, info.screenHeight); ctx.fillStyle = "#F00" ; ctx.fillRect(0, x, 10, 10); x += 20; setTimeout(() => { requestAnimationFrame(render); }, 5000); } requestAnimationFrame(render); |
代码片段wechatide://minicode/ec7ipOmc7g17
你好,这个是因为手机GPU驱动实现的原因,Android设备必须每帧清屏并画满,否则可能会出现花屏。如果使用主流游戏引擎,应该是已经适配了该问题。
不是说花屏,是说canvas内容被重复绘制。不过我现在不方便试是不是Android底层的问题,目前我这儿三台不一样的手机全都有这个现象。我不觉得Android会干这种每帧都把一个屏幕大的内容重复采样几十次这种单纯消耗电量的事。而且也不至于出现每帧缓冲内容都是不一样的垃圾数据这种显现。 现在Andorid上小游戏用的是SurfaceView还是TextureView?
占用内存这个问题太吓人了,希望你们重视下,不然安卓游戏根本没法玩。
我们的游戏,同样的一个游戏,在同样的安卓机子上,用chrome打开玩很长时间,只占用100-300M内存(300是巅峰,很快会降下去,基本稳定在200M左右),用微信小游戏,进入主场景,只加载了10M左右图片资源,就占用了500、600M内存,然后会一直增加,然后能到1G多,有时候会降到900多M,但基本会稳定在1G左右,很吓人。
而且,这个游戏的H5版本,我都没做内存释放,小游戏版本,我尝试了做图片资源从内存释放,并且调用GC,但不管做不做,内存都差不多,一直在1G左右。
而且我也测试了几款目前上线小游戏的重度游戏(就是图片资源用的比较多的),发现同样的问题,就是H5版本和小游戏版本占用内存差距很大。
占用内存过多,就会经常出现黑屏现象,很多安卓玩家反馈这个问题。希望你们研究下看看是这么回事。
我也遇到这个问题. 我做了一个跑酷游戏,iphone4s渲染都丝滑般流畅.
到安卓这边,一堆845机器出现场景在移动时,会突然回到上一帧的画面,给人感觉就是走走停停的. 我开始以为是物理引擎的锅,后来我输出刚体的位置信息仔细查看,发现位置都是连贯正常的. 应该是安卓版微信的锅了.
你好,请提供一下出现问题的机型和微信版本,以及能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。
wechatide://minicode/ec7ipOmc7g17