【发布时间】:2011-04-20 12:03:19
【问题描述】:
我正在使用 HTML5 画布开发一个简单的 JavaScript 游戏。这是一个非常典型的游戏循环设置,包括:
- init() 函数初始化要使用的游戏区域的对象,随机化一些开始 x/y 位置和类似的设置任务
- draw() 函数绘制所有游戏对象,包括一些简单的画布形状和一些图像
- setInterval 每 25 毫秒调用一次绘图
在开始这个项目时,我在 init() 函数的末尾调用了 setInterval,因此它会在您加载页面后立即开始绘制和动画,并且一切正常。现在我更进一步,我想在加载时绘制一个完全填充的静态游戏场,然后使用一个按钮来启动主游戏循环间隔。所以我在 init() 的末尾添加了一个对 draw() 的调用,问题是当我这样做时,所有的画布形状都被正确绘制,但没有图像呈现在画布上。
如果我让 draw() 运行几次,它们会渲染,比如...
var previewDraw = setInterval(draw, 25);
var stopPreviewDraw = function() { clearInterval(previewDraw) }
setTimeout(stopPreviewDraw, 100)
...但这似乎很愚蠢。为什么一次调用 draw() 不起作用?我已经在 Chrome 和 Firefox 的控制台中记录了这些对象,它们的一切看起来都很好;他们已经有适当的 img src 路径和起始 x/y 值可用于传递以分配给创建的新 Image(),然后通过我的 canvas.2dcontext.drawImage() 方法调用。
我正在 Chrome 6 和 Firefox 3.6.10 中进行测试,但他们都对这种行为感到困惑。 Chrome 的控制台中没有显示任何错误或问题,但如果我仅在 Firefox 抛出此错误时尝试调用 draw():
未捕获的异常:[异常...“组件返回失败代码:0x80040111(NS_ERROR_NOT_AVAILABLE)[nsIDOMCanvasRenderingContext2D.drawImage]”nsresult:“0x80040111(NS_ERROR_NOT_AVAILABLE)”位置:“JS框架:::http://localhost/my-game-url/::drawItem::第 317 行“数据:无]
我的 Google 搜索该错误提示图像损坏,但它们都在 Preview 和 Photoshop 中打开,没有任何问题。
【问题讨论】:
标签: javascript html canvas drawimage