javascript - Javascript中实例上的drawImage
问题描述
我不明白为什么方法 drawImage 不适用于 Canvas2D 实例。
但是当我把它放在 setTimeout 方法中时它可以工作,为什么?
function Canvas2D() {
this._canvas = document.getElementById('screen');
this._canvasContext = this._canvas.getContext('2d');
}
Canvas2D.prototype.clear = function() {
this._canvasContext.clearRect(0, 0, this._canvas.width, this._canvas.height);
};
let Canvas = new Canvas2D();
let image = new Image();
image.src = './assets/sprites/spr_background.png';
// Doesn't work here
Canvas._canvasContext.drawImage(image, 33, 71);
setTimeout(() => {
// When I put it here it works
// Canvas._canvasContext.drawImage(image, 33, 71);
}, 1000);
解决方案
必须加载图像才能正确绘制。如果您要执行以下操作:
image.onload = function(){
Canvas._canvasContext.drawImage(image, 33, 71);
}
它应该工作,我猜...
在 1 秒超时后,图像很可能已在该时间内加载。上面的代码等待图像被加载,然后绘制它。(所以如果它在不到一秒的时间内加载它可以更早地绘制它,如果超过一秒它不会失败)
推荐阅读
- csv - Http请求未完成
- javascript - 如何将时间数组转换为 24 小时格式
- javascript - Express.js 显示未定义的 req.body,其中路由从其他文件重新组合
- java - 如何从给定范围加载日期数组?
- java - java.lang.ClassNotFoundException:用于 Spark 3.0.0 的 org.apache.spark.sql.sources.v2.DataSourceV2
- regex - 使用正则表达式进行 DART 条件查找和替换
- java-8 - 在 Netbeans 中运行项目时如何抑制错误的“Java 版本已过期消息”
- python - 如何在python中将base64字节转换为图像
- javascript - 如何让 async/await 真正等待
- r - 如果另一个变量的下一行满足条件,则定义新变量取 1