小さな 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";
}
}
}