【发布时间】:2013-07-13 14:18:34
【问题描述】:
我一直在尝试创建一个基于 HTML5 的小型示例,但遇到了一些问题。我想在<canvas> 上渲染一块石头,但是这个 Javascript 对象不能正常工作。
function ImageData() {
this.image_names = ["rock1"];
this.images = new Array();
this.loadResources = function () {
for (var i = 0; i < this.image_names.length; i++) {
var img = new Image();
img.onload = (function (a) {
a.images[a.image_names[i]] = img;
console.log(a.images); //log is successful, image is in array
})(this);
img.src = "images/" + this.image_names[i] + ".png";
}
}
}
它的用途如下:
var a = new ImageData();
a.loadResources();
var rock1_image = a.images["rock1"]; //the "rock1.png" image
如果您尝试通过控制台访问该对象,在确定图像已加载后,您会看到图像数组中没有图像。我不知道为什么它不起作用。看了好几遍了。
编辑:这是我的最终工作结果:
function ImageData() {
this.image_names = ["rock1"];
this.images = new Array();
this.loadResources = function (callback) {
for (var i = 0; i < this.image_names.length; i++) {
var img = new Image();
img.onload = (function (a, i) {
return function() {
a.images[a.image_names[i]] = img;
if (i == (a.image_names.length - 1)) callback();
};
})(this, i);
img.src = "images/" + this.image_names[i] + ".png";
}
}
}
【问题讨论】:
-
对onload属性赋值的RHS上的函数立即运行,所以结果被赋值。它不返回任何内容,因此分配了 undefined。
-
如果您使用非数字键,为什么
images是一个数组。 -
在处理即时生成的多个帧中的多个对象时,无论它们是如何组织的,都更容易从数组中提取图像。一张图片被使用了几次。
标签: javascript html image canvas