javascript - 为 html5 画布使用 javascript 同步图像加载器时使用 404 的默认图像
问题描述
如何将默认图像 (0.png) 添加到此图像加载器中,而不是在 404 上引发错误?
var artArrayDef = ['player_art/' + p_me_gen + 'body' + me_race + '.png', 'player_art/head' + me_face + '.png'];
var artArray01 = ['item_art/' + p_me_gen + me_chest + '.png', 'player_art/hair' + me_hair + '.png', 'item_art/' + me_helm + '.png', 'item_art/' + p_me_gen + me_legs + '.png', 'item_art/' + me_feet + '.png', 'item_art/' + me_hands + '.png', 'item_art/' + me_sleeves + '.png', 'item_art/' + me_about + '.png', 'item_art/' + me_hold + '.png', 'item_art/' + me_wield + '.png'];
// Images for humanoid body and gear
function loadImage_char(imagePath) {
return new Promise((resolve, reject) => {
let image = new Image();
image.addEventListener("load", () => {
resolve(image);
});
image.addEventListener("error", (err) => {
reject(err);
});
image.src = 'https://www.example.com/interface/images/' + imagePath;
});
}
let imageSources = [].concat(artArrayDef, artArray01);
Promise.all(imageSources.map(i => loadImage_char(i))).then((images) => {
images.forEach((image) => {
meCtx.drawImage(image, 0, 0);
});
}).catch((err) => {
console.error(err);
});
解决方案
var artArrayDef = ['player_art/' + p_me_gen + 'body' + me_race + '.png', 'player_art/head' + me_face + '.png'];
var artArray01 = ['item_art/' + p_me_gen + me_chest + '.png', 'player_art/hair' + me_hair + '.png', 'item_art/' + me_helm + '.png', 'item_art/' + p_me_gen + me_legs + '.png', 'item_art/' + me_feet + '.png', 'item_art/' + me_hands + '.png', 'item_art/' + me_sleeves + '.png', 'item_art/' + me_about + '.png', 'item_art/' + me_hold + '.png', 'item_art/' + me_wield + '.png'];
// Images for humanoid body and gear
function loadImage_char(imagePath) {
return new Promise((resolve, reject) => {
let image = new Image();
image.addEventListener("load", () => {
resolve(image);
});
image.addEventListener("error", (err) => {
// Add the default image here <---
let defaultImg = new Image();
defaultImg.src = 'https://www.example.com/interface/images/item_art/0.png';
resolve(defaultImg);
});
image.src = 'https://www.example.com/interface/images/' + imagePath;
});
}
let imageSources = [].concat(artArrayDef, artArray01);
Promise.all(imageSources.map(i => loadImage_char(i))).then((images) => {
images.forEach((image) => {
meCtx.drawImage(image, 0, 0);
});
}).catch((err) => {
console.error(err);
});
推荐阅读
- amazon-web-services - 如何将 Web 服务部署到 Amazon EKS?
- java - 如何修复“未找到改造注释”。在简单的 GET 回调中?
- rabbitmq - 发布到消息队列的数百万条记录未显示在 RabbitMq 管理仪表板屏幕上
- clips - 如何在 CLIPS 中计算 Haversine 公式
- javascript - 检查对象中的嵌套数组是否包含空值
- r - 连接到 Netezza 的 RODBC 错误:无法打开 lib libnzodbc.so 文件未找到
- r - 无法合并两个图例
- cypress - 赛普拉斯 - 如何最好地测试多步骤流程
- autofixture - 未调用 AutoFixture 类型自定义
- animation - Julia Plotting: push!() 添加到错误的行