Javascript 画布drawImage不';不要第一次画图像
我正在使用HTML5画布开发一个简单的JavaScript游戏。这是一个非常典型的游戏循环设置,包括:Javascript 画布drawImage不';不要第一次画图像,javascript,html,canvas,drawimage,Javascript,Html,Canvas,Drawimage,我正在使用HTML5画布开发一个简单的JavaScript游戏。这是一个非常典型的游戏循环设置,包括: init()函数,用于初始化要在运动场中使用的对象,将一些开始x/y位置和类似的设置任务随机化 函数,用于绘制所有游戏对象,包括一些简单的画布形状和一些图像 设置每隔25毫秒调用draw的间隔 在开始这个项目的时候,我在init()函数的末尾调用了setInterval,所以它会在加载页面后立即开始绘图和设置动画,一切正常。现在,我想进一步绘制一个完全填充的静态加载游戏场,然后使用按钮启动
- init()函数,用于初始化要在运动场中使用的对象,将一些开始x/y位置和类似的设置任务随机化
- 函数,用于绘制所有游戏对象,包括一些简单的画布形状和一些图像
- 设置每隔25毫秒调用draw的间隔
var previewDraw = setInterval(draw, 25);
var stopPreviewDraw = function() { clearInterval(previewDraw) }
setTimeout(stopPreviewDraw, 100)
……但这似乎很愚蠢。为什么对draw()的单个调用不起作用?我已经在Chrome和Firefox的控制台上记录了这些对象,它们的一切看起来都很好;它们已经有了适当的img src路径和起始x/y值,可用于传递以分配给创建的新映像(),然后通过my canvas.2dcontext.drawImage()方法调用该映像
我正在Chrome 6和Firefox 3.6.10中测试这一点,他们的行为让我感到困惑。Chrome的控制台中没有显示错误或问题,但如果我仅在Firefox抛出以下命令时尝试调用draw():
未捕获异常:[异常…”组件返回故障代码:0x80040111(NS_错误\u不可用)[nsIDOMCanvasRenderingContext2D.drawImage]“nsresult:“0x80040111(NS_错误\u不可用)”位置:“JS帧:::drawItem::line 317”数据:否]
我在谷歌搜索该错误时发现一个损坏的图像,但它们都在预览和Photoshop中打开,没有任何问题。我假设您在触发窗口对象的onload事件后调用init()。问题是,这并不能保证图像数据在该点实际可用。AFAIR将在从网络中获取图像后触发,但之后仍需要解码
您最好等待图像的加载事件。DUH。。。不,因为这是一个实践项目,我非常专注于我正在学习的新东西,我完全忘记了显而易见的东西(我只是在页面底部内联运行它)。因为没有那么多的图像资源,而且它们都很小,所以在window.onload上运行init()可以很好地处理这个问题。非常感谢,Jakub。最终我想我还是会用数据URL替换所有的外部图像。