我正在尝试为我的游戏制作非常简单的图像加载器,但我无法找出为什么这不起作用..这是我的代码:
window.onload = function() {
var canvas = document.getElementById('gameCanvas');
var ctx = canvas.getContext('2d');
var images = [];
function loadImages(imageFiles) {
var loadedImages = [];
for(var i = 0; i < imageFiles.length; i++) {
var image = new Image();
image.onload = function() {
alert("Loaded");
}
image.src = imageFiles[i];
loadedImages[i] = image;
}
return loadedImages;
}
function init() {
images = loadImages(['img/1.png', 'img/2.png']);
main();
}
function main() {
ctx.drawImage(images[1], 0,0);
}
init();
}
我看到的只是没有图像的空白画布。
答案 0 :(得分:1)
使用
Promise
,Promise对象用于延迟和异步计算。承诺代表尚未完成的操作,但预计在未来。
Promise.all()
, Promise.all(iterable)
方法返回一个承诺,该承诺在迭代参数中的所有承诺都已解决时解析。
function loadImages(imageFiles) {
var promiseArr = [];
for (var i = 0; i < imageFiles.length; i++) {
var eachPromise = new Promise(function(resolve, reject) {
var image = new Image();
image.onload = function() {
alert('Loaded!');
resolve();
}
image.src = imageFiles[i];
});
promiseArr.push(eachPromise);
}
return promiseArr;
}
function init() {
var AllImages = ['https://www.google.co.in/logos/doodles/2016/earth-day-2016-5741289212477440.2-5643440998055936-ror.jpg', 'https://www.google.co.in/logos/doodles/2016/earth-day-2016-5741289212477440.3-5700735861784576-ror.jpg'];
var allPromises = loadImages(AllImages);
Promise.all(allPromises).then(function() {
alert('All Loaded');
main();
});
}
function main() {}
init();
答案 1 :(得分:0)
尝试替换
image.onload = function() {
alert("Loaded");
}
与
if(i==1){
image.onload = function() {
main();
}}
加载第二张图像时,会调用您的函数 然后编辑代码以满足您的需求 我会在一段时间内编辑更多
答案 2 :(得分:0)
图像是异步加载的,因此当您尝试在main中读取文件时,图像仍在加载。因此,您需要等到所有图像都加载完毕。
window.addEventistener("load", function() {
var canvas = document.getElementById('gameCanvas');
var ctx = canvas.getContext('2d');
var images = [];
function loadImages(imageFiles, completeFnc) {
var loadedImages = [],
loadedCnt = 0;
for(var i = 0; i < imageFiles.length; i++) {
var image = new Image();
image.onload = function() {
loadedCnt++; //increment the count
if(loadedCnt==imageFiles.length) { //if count equals total, fire off callback
completeFnc();
}
};
image.onerror = function () {
alert("There was a problem loading the images");
};
image.src = imageFiles[i];
loadedImages[i] = image;
}
return loadedImages;
}
function init() {
images = loadImages(['img/1.png', 'img/2.png'], main);
}
function main() {
ctx.drawImage(images[1], 0,0);
}
init();
});
答案 3 :(得分:0)
这应该效果更好
<Route path="/tag/:slug" component={Archives} onChange={this.method.bind(this)} />
答案 4 :(得分:-1)
您需要将项目推送到数组中。替换
loadedImages[i] = image;
与
loadedImages.push(image);