Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Canvas:drawImage方法失败,没有错误_Javascript_Html_Html5 Canvas - Fatal编程技术网

Javascript Canvas:drawImage方法失败,没有错误

Javascript Canvas:drawImage方法失败,没有错误,javascript,html,html5-canvas,Javascript,Html,Html5 Canvas,一点背景: 我正在制作一个基于2d浏览器的游戏。渲染代码将移动对象和场景对象拆分为两组,然后将每组整体绘制到8192x8192画布上,该画布不会直接显示。只有当该组中的某些内容以某种方式发生变化时,才会执行此操作。对于所有帧,执行以下操作: canvas.drawImage( zoneBufferStatic, Math.floor((w / 2 - playerX) * tileSize), Math.floor((h / 2 - playerY) * tileSize) ); c

一点背景:

我正在制作一个基于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
zoneBufferDynamic
分别是屏幕外的风景画布和移动对象画布;
w
h
是用户可见画布的宽度和高度,以瓷砖为单位;
playerX
playerY是玩家的位置,同样是在平铺中;
tileSize
是平铺侧面的像素数,当前为32)

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


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


有没有更好的方法来做到这一点,或者有一种(非黑客的)方法来检测它何时失败,这样我就可以退回到直接在可见画布上绘图了?

是否有可能Chromebook内存不足,这可能会导致问题?如果每个像素是4字节(RGBA),并且内存中有6710万像素(8192x8192)这几乎是250Mb的内存。如果你有一堆其他程序运行或打开标签,加上使用RAM的操作系统,你很容易就会耗尽内存。2Gb的内存现在不多了。

@Stano Firefox中没有消息,但在Firefox中渲染效果很好。再说一次,我的桌面上只有Firefox。@Stano the fFunction没有停止-在两次drawImage调用之前和之后调用的内容在Chromebook上仍然有效。两次drawImage调用似乎被默默忽略。此线程中另一个用户的可能副本表示他可以使用15000像素。这将因浏览器而异。请查看该线程中我的答案,以查看可能的解决方法ds。@Ken“后缓冲区”画布的绘制没有任何问题。在主(可见)画布上绘制这些画布时,无声地失败了。@BenLubar你在这里解决过这个问题吗?我在iPad上得到了一些类似的东西。。