针对 iOS 14 Web 平台性能变差的优化方案

@EndEvil
Awesome work!!

I will immediately start testing your solution on top of our games and report back!

2赞

We also replied in English forum

1赞

Works like a charm! I only tested the above 2.2 version on 2.3.3 verison of CC. I did comparions with before and after and compared iOS14 to iOS13 with this update and it is completely compareable.

I am extremely thankful for your swift action here and finding out this in such a short notice!
Full 5 stars :star: :star: :star: :star: :star: from me for the whole Cocos Creator team!

1.x版本呢

1赞

同问下大佬,1.0的解决方案

1.x 没这个问题

可以,经过修改,我们项目比之前流畅了:joy:

引擎版本2.3.0 采用

const isIOS14Device = cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser && cc.sys.isMobile && /iPhone OS 14/.test(window.navigator.userAgent);
if (isIOS14Device) {
    cc.MeshBuffer.prototype.checkAndSwitchBuffer = function (vertexCount) {
        if (this.vertexOffset + vertexCount > 65535) {
            this.uploadData();
            this._batcher._flush();
        }
    };     
    cc.MeshBuffer.prototype.forwardIndiceStartToOffset = function () {
        this.uploadData();
        this.switchBuffer();
    }  
}

提示 undefined is not an object (evaluating cc.MeshBuffer.prototype)?

1赞

我们用的是2.0.9用文中的方式修改引擎。修改后帧率是提上高了。不过出现了新的问题,有些spine动画会渲染不出来。不知道还有没有其它方式可以修复掉帧的问题。

这段代码在哪儿写的?

查看了一下打印,spine动画不显示是因为报了这个错,console.error(‘Failed to update data, bytes exceed.’);

修改的是哪个文件夹下的文件?

有demo么?

mesh-buffer.js 的改动是在 destroy 方法中把 array 的迭代方式改成 for in, 这样做有什么特别的原因吗?

那段有改动么?主要是需要改这段:

呃不好意思,原来是我合并过更新版本的mesh-buffer。。。

修改后,帧率是上来了,但是出现了新的问题,部分图片显示是黑色的。

什么版本?

2.3.2

确定是这个改动引入的么?