画布:drawImage方法失败,没有错误

问题描述 投票:10回答:1

一点背景:

我正在制作基于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上下文; zoneBufferStaticzoneBufferDynamic分别是用于风景和运动对象的屏幕外画布; wh是屏幕的宽度和高度使用者在方块中看到的画布; playerXplayerY分别是玩家在方块中的位置; tileSize是方块侧面的像素数,当前为32)

UI(聊天文本,对话框)直接在可见的画布上绘制。


上面显示的两个drawImage调用完全可以在我的台式机(16GB RAM,i7,GTX 780)上正常运行,但在我的Chromebook(三星ARM(代号daisy,snow),2GB RAM)上却什么也不做。 UI正常显示,但从不显示风景和人物。 Chrome的开发者控制台中没有错误。我已经确认,后台缓冲区是使用Chrome开发者控制台中的document.body.appendChild(zoneBufferStatic)绘制的。

是否有更好的方法可以执行此操作,或者有(非hacky)检测失败时间的方法,所以我可以直接在可见的画布上进行绘制?

javascript html html5-canvas
1个回答
0
投票

Chromebook可能内存不足,可能会引起问题吗?如果每个像素为4字节(RGBA),并且内存(8192x8192)中有6710万像素,则RAM几乎为250Mb。如果您有很多其他程序正在运行,或者使用RAM打开了选项卡,以及使用RAM的操作系统,那么我猜很容易就会用完RAM。这些天2Gb的内存已不足。

© www.soinside.com 2019 - 2024. All rights reserved.