【发布时间】:2013-11-06 09:50:42
【问题描述】:
在我的画布项目中,我有两种类型的精灵对象,一种是用矢量图形绘制的,另一种是在画布上绘制位图图像的。
draw function(context){
...
context.lineTo(some place)
context.lineTo(some other place)
etc.
}
另一种类型的精灵是位图图像,目前它们是占位符资产,因此足够小,不需要 onload 事件处理程序,但实际资产会更大,因此需要一个。
bitmap loadImage function(){
this.image = new Image();
//Currently my images are too small to warrant an onload eventHandler as they're placeholders
this.image.src = "some path";
}
目前我将所有精灵存储在同一个容器中,并通过一个简单的循环执行绘图。这暂时有效,因为位图精灵没有 onload 函数。
for each sprite {
sprite.draw(context);
}
一旦我用 spritesheets 替换了占位符资产,他们将需要一个分配给 onload 事件的函数 - 这会破坏我的设计。
谁能解释我如何实现将所有精灵存储在同一个容器中并通过迭代该集合来调用draw?
注意:使用 onload 事件处理程序添加了位图绘制,但是(显然)在加载图像之前在位图精灵上调用 draw 时出现错误。
【问题讨论】:
-
onload 应该只触发一次,您可以在处理程序中调用代码中的下一步。另外:“目前我的图像太小,不能保证 onload eventHandler..” 这不是保证这一点的大小,而是加载是异步的,并且存在网络延迟可以延迟无论图像本身有多大或多小,都会加载。
-
也许写一些像
Image.Load这样的管理器会在所有资产加载完成时通知你。 -
是的,我尝试过使用 bool 开关并在所有精灵都准备好之前不调用 draw,但当我尝试时似乎不是最好的解决方案。干杯!
-
@Fendorio 随时将解决方案编辑到问题中,以便我们了解您的方法有什么问题。
标签: javascript canvas