javascript - Canvas : drawImage method fails without error

标签 javascript html html5-canvas

一点背景:

我正在制作一个基于浏览器的 2d 游戏。渲染代码将移动对象和风景对象分成两组,然后将每组整体绘制到 8192x8192 的 Canvas 上,不直接显示。仅当该组中的某些内容以某种方式发生变化时才会这样做。对于所有帧,执行以下操作:

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 是用户可见 Canvas 的 2d 上下文;zoneBufferStaticzoneBufferDynamic 分别是风景和移动物体的屏幕外 Canvas ;wh 是用户的宽度和高度- 瓦片中的可见 Canvas ;playerXplayerY 是玩家的位置,同样在瓦片中;tileSize 是瓦片侧面的像素数,目前为 32)

UI(聊天文本、对话框)直接绘制在可见 Canvas 上。

上面显示的两个 drawImage 调用在我的桌面(16GB RAM,i7,GTX 780)上完全正常工作,但在我的 Chromebook(Samsung ARM(代号 daisy,snow),2GB RAM)上什么也不做。界面正常显示,但从未显示风景和人物。 Chrome 的开发者控制台中没有错误。我已确认使用 document.body.appendChild(zoneBufferStatic) 绘制后台缓冲区在 Chrome 开发者控制台中。

有没有更好的方法来做到这一点,或者(非hacky)方法来检测它何时失败,以便我可以直接在可见 Canvas 上绘图?

最佳答案

Chromebook 是否有可能内存不足而导致出现问题?如果每个像素是 4 字节 (RGBA),并且您在内存 (8192x8192) 中有 6710 万像素,那么这几乎是 250Mb 的 RAM。如果您有一堆其他程序正在运行或选项卡打开以及使用 RAM 的操作系统,我猜您可能很容易用完 RAM。如今,2Gb 的内存并不多。

关于javascript - Canvas : drawImage method fails without error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18127231/

相关文章:

javascript - 如何测试表情符号在discord.js 中是否有动画

javascript - 隐藏在 Firefox 中的滚动条

html - 如何在css中产生单词之间的空间?

html - 有没有办法使用 Vue 路由器路由到 html 文件?

html - Inline-flex 居中和间隙问题

javascript - 将 Canvas 图像作为文件流 HTML5 发送

javascript - 滚动到带有溢出的 div 内的目标

javascript - 只想使用返回值并忽略警报

javascript - 当我绘制边界框时, Canvas 内渲染的图像消失了?

javascript - 设置 Canvas 图案图像的高度