javascript - 无法在“CanvasRenderingContext2D”上执行“drawImage”:提供的值不是“类型”
问题描述
我为我的游戏循环实现了一个 rAF(requestAnimationFrame) 设置:
draw: function (x, y) {
setTimeout(function () {
requestAnimationFrame(function() {
Player.draw(150, 150);
});
//drawing code: worked perfectly with setInterval
}, 1000 / 60);
},
它在一个Player
对象中,在一个draw
函数中。我打电话:
Player.draw(Player.x, Player.y);
在代码的底部。
从我在类似问题上看到的情况来看,需要在评估之前声明图像。我使用立即调用的函数将图像加载到顶部:
var images = [];
x = 0;
(function() {
for (let i = 0; i < 20; i++) {
images[i] = new Image();
images[i].src = ('../webgame/assets/images/survivor-idle_shotgun_' + i + '.png');
};
})(); // This worked perfectly with setInterval too
但是我收到此错误:
未捕获的类型错误:无法在“CanvasRenderingContext2D”上执行“drawImage”:提供的值不是类型“(CSSImageValue 或 HTMLImageElement 或 SVGImageElement 或 HTMLVideoElement 或 HTMLCanvasElement 或 ImageBitmap 或 OffscreenCanvas)”
它指向这行代码:
ctx.drawImage(images[this.spriteCostumeCount], this.x, this.y, this.width, this.height);
在绘图代码中。
如何使用此 requestAnimationFrame 使播放器精灵动画化,如何解决此错误?
解决方案
您需要确保images[this.spriteCostumeCount]
已定义且类型正确。
一个简单的测试方法是console.log(typeof images[this.spriteCostumeCount])
在调用方法之前添加一个权限drawImage
。
如果结果未定义,您可以将调用封装在if
条件中。如果已定义,则使其成为drawImage
方法接受的类型。
推荐阅读
- javascript - 使用 JS 和 CSS 制作动画
- c# - MVVM + 实体框架
- multithreading - 当 Java 看起来不可能时,编译器警告图可能没有被初始化
- c - CS50 Luhn 的 C 语言算法
- php - 基于购物车总数和 WooCommerce 中用户角色的累进折扣
- node.js - 用于 Cassandra 的类型ORM
- html - Safari 没有出现在我的网站上的图像
- css - 使用 express 数据设置 CSS 值时出现未定义错误
- javascript - 在 WebGL 中使用 texImage2D 加速或多线程纹理上传
- c++ - 使用 C++ 在 QT 5 中使用 QPainter 绘制文本可能做错了什么?