rt,在某些个人项目中我使用了多个不同zIndex的canvas去绘制一些对象(子弹),类似如下代码(画布已经封装了某种类)
// 创建代码
for (let O in self["CanvasList"]) self["CanvasList"][O]["__Delete__"]();
for (let R = 0; R <= oS["R"] + 1; ++R) {
self["CanvasList"][R] = new oEffect({ Dev_Style: { width: 1500, height: 800, zIndex: R * 3 + 2, top: "-100px", left: "-100px" }, Width: 1500, Height: 800 }, EDPZ);
self["CanvasList"][R + "_Shadow"] = new oEffect({ Dev_Style: { width: 1500, height: 800, zIndex: R * 3, top: "-100px", left: "-100px" }, Width: 1500, Height: 800 }, EDPZ);
}
// 游戏帧调用代码
for (let Q in CanvasList) CanvasList[Q]["Clear_Canvas"]();
// ...以及其它绘制操作
其实本来每个子弹都是独立的dom节点的,但是根据实际应用来看这样远比canvas绘制卡顿的多,因此我在去年九月份就尝试把这些东西搞到canvas里,但是因为部分原因我不得不创建超过十个透明canvas。
这样在频繁调用 TraversalOf() 函数的时候,即使画布上没有任何物体,不断地清空画布也会导致部分浏览器严重卡顿掉帧。
这似乎跟浏览器型号有关系,又似乎跟电脑配置有关联,比如在chrome上运行卡顿在edge上运行流畅,又或者是在三个浏览器上都卡顿。
我查过相关资料,但是都没有很好的解释这一现象的原因,我也不懂canvas相对应的底层代码是如何实现的。
有没有懂哥知道为什么会造成这种卡顿差异,或者有其它的解决办法吗,万分感谢orz