2.4.11 ts Hello World 微信小游戏真机 update 跳帧

  • Creator 版本: 2.4.11

  • 目标平台: 微信小游戏真机

  • 重现方式:
    新建 ts 的 hello world 项目,在 Helloworld.ts 中添加生命周期代码
    protected update(dt: number): void {
    if (0.02 < dt) {
    console.log (dt[${dt}] ${new Date});
    };
    }
    发布微信小游戏,然后真机预览


    可以从图中看到,有大量的 dt 是大于 0.1 秒的,出现间隔大约为 0.1 s,每次出现意味着画面严重掉帧(60 帧变为 10 帧)
    其次,神奇的是,把 hello world 切到后台再切回来,掉帧问题消失

  • 首个报错: 无报错

  • 之前哪个版本是正常的: 暂未发现

  • 手机型号: nova6 se

  • 手机浏览器: 微信小游戏

  • 编辑器操作系统:windows 10

  • 重现概率: 100%

这个问题困扰一天了,有谁知道解决办法的话希望能够分享一下 :pray:

讲道理不应该的吧

试试其他版本呢,间歇性掉帧很可能是触发了GC

想吐槽一下,微信抖音小游戏平台比html5还垃圾

其实是自己项目遇到了,后面不断地定位,最终发现本来 update 就有问题

hello world 项目无任何可以引起 gc 的逻辑,其实我是在 2.4.8 遇到的,后面发现 2.4.11 也还是有这个问题,3.x 的话就不试了,因为这样换大版本改动太大了

更正一下,出现间隔应该是 1 秒,题目里面说错了

又一天过去了,问题依旧存在 :sob:

我以前做的跑酷项目 也遇到这个问题无法解决,最后项目直接不做了。 :joy:

1赞

不是吧,这么绝望吗 :sob:

@jare

最新进展是,定位到 gl.drawElements 导致 RequestAnimationFrame 延后然后产生了跳帧的情况,目前无法进一步定位具体的原因,希望官方人员注意到这个问题的话能够帮忙看看 :pray:

帮忙顶一下,希望有人遇到过,或者官方给出一些解释和解决方案

js是单线程的,理解JS的事件循环机制, 计时器设定的延时是没有保证的,JavaScript单线程异步事件只有在它有空的时候才执行。**

理论上如果帧率稳定, dt回调时间间隔应该是16ms 。大于16ms 的话应该是某个东西影响到了 mainloop 的循环了。

大于0.1秒就离谱了, 2.4.11应该不会这么挫, 估计是小游戏runtime的机型适配问题, 用新版运行时试试

谢谢帮顶!

是的,可现在情况是引擎其他逻辑每帧占用时间我统计过,大概不超过 2 ms,但是现在就是有大约每秒卡 0.1 秒的情况

mainloop 的代码我都统计了,对于 hello world ,没有一次占用时间超过 2 ms 的,因为 drawElements 注释以后该问题就不存在,所以也不是 mainloop 导致 gc

cocos 引擎、微信、微信开发者工具都是最新的,问题也仍然存在

drawElements 是opengl 渲染纹理的逻辑。 那是不是 gl的渲染耗时造成的。。