一点背景:
我正在制作一个基于浏览器的 2d 游戏。渲染代码将移动对象和风景对象分成两组,然后将每组整体绘制到 8192x8192 的画布上,不直接显示。仅当该组中的某些内容以某种方式发生变化时才会这样做。对于所有帧,执行以下操作:
canvas.drawImage(
zoneBufferStatic,
Math.floor((w / 2 - playerX) * tileSize),
Math.floor((h / 2 - playerY) * tileSize)
);
canvas.drawImage(
zoneBufferDynamic,
Math.floor((w / 2 - playerX) * tileSize),
Math.floor((h / 2 - playerY) * tileSize)
);
(其中canvas
是用户可见画布的 2d 上下文;分别是风景和移动对象的屏幕外画布;zoneBufferStatic
并且是用户可见画布的宽度和高度(以图块为单位);以及是玩家的位置,同样以图块为单位; 并且是图块一侧的像素数,目前为 32)zoneBufferDynamic
w
h
playerX
playerY
tileSize
UI(聊天文本、对话框)直接绘制在可见画布上。
上面显示的两个 drawImage 调用在我的桌面(16GB RAM,i7,GTX 780)上完全正常工作,但在我的 Chromebook(Samsung ARM(代号 daisy,snow),2GB RAM)上什么也不做。界面正常显示,但从未显示风景和人物。Chrome 的开发者控制台中没有错误。我已经确认正在使用document.body.appendChild(zoneBufferStatic)
Chrome 开发者控制台绘制后台缓冲区。
有没有更好的方法来做到这一点,或者(非hacky)方法来检测它何时失败,以便我可以直接在可见画布上绘图?