Javascript Canvas:drawImage方法失败,没有错误
一点背景: 我正在制作一个基于2d浏览器的游戏。渲染代码将移动对象和场景对象拆分为两组,然后将每组整体绘制到8192x8192画布上,该画布不会直接显示。只有当该组中的某些内容以某种方式发生变化时,才会执行此操作。对于所有帧,执行以下操作: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
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上得到了一些类似的东西。。