Javascript “如何修复”;TypeError:无法执行';drawImage';在';CanvasRenderingContext2D'&引用;?

Javascript “如何修复”;TypeError:无法执行';drawImage';在';CanvasRenderingContext2D'&引用;?,javascript,Javascript,我是一名JavaScript程序员初学者,我正在学习一本名为“createwith”的书,我在代码方面遇到了问题。我一直在关注这本书,但当我尝试运行它时,我发现以下错误: 未捕获类型错误:未能在“CanvasRenderingContext2D”上执行“drawImage”:提供的值不是类型“(CSSImageValue或HTMLImageElement或SVGImageElement或HTMLVideoElement或HtmlCalCasElement或ImageBitmap或Offscree

我是一名JavaScript程序员初学者,我正在学习一本名为“createwith
”的书,我在代码方面遇到了问题。我一直在关注这本书,但当我尝试运行它时,我发现以下错误:

未捕获类型错误:未能在“CanvasRenderingContext2D”上执行“drawImage”:提供的值不是类型“(CSSImageValue或HTMLImageElement或SVGImageElement或HTMLVideoElement或HtmlCalCasElement或ImageBitmap或OffscreenCanvas)

我一直在将代码输入纯文本编辑器,并在Chrome上查看它。如何修复此错误

如果运行代码段,您应该能够看到错误

//常数
var CANVAS_WIDTH=800;
var CANVAS_HEIGHT=600;
var接地电阻Y=540;
//设置
var canvas=document.createElement('canvas');
var c=canvas.getContext('2d');
canvas.width=画布宽度;
canvas.height=画布高度;
document.body.appendChild(画布);
var-cameraX=0;
var bushData=generateBushes();
var bush1Image=新图像();
bush1Image.src='bush1.png';
var bush2Image=新图像();
bush2Image.src='bush2.png';
window.addEventListener(“加载”,启动);
函数start(){
window.requestAnimationFrame(主循环);
}
函数generateBushes(){
var generatedBushData=[];
var bushX=0;
而(衬套<(2*画布宽度)){
var-bushImage;
如果(Math.random()>=0.5){
bushImage=bush1Image;
}否则{
bushImage=bush2Image
}
generatedBushData.push({
x:bushX,
y:80+数学随机数()*20,
图片:bushImage
});
bushX+=150+数学随机()*200;
}
返回生成的数据;
}
//主回路
函数mainLoop(){
更新();
draw();
window.requestAnimationFrame(主循环);
}
//更新
函数更新(){
//更新灌木丛。
对于(var i=0;i
将他的手指放在:
bushData
中对象中的
图像
中的错误是
未定义的
,因为您调用
GenerateBushs
太快了。你有:

var bushData = generateBushes();

var bush1Image = new Image();
bush1Image.src = 'bush1.png';

var bush2Image = new Image();
bush2Image.src = 'bush2.png';

但是在调用
generateBushes
之前,需要初始化
bush1Image
bush2Image
。只是移动
var bushData=generateBushes()
to之后
bush2Image.src='bush2.png'修复它。

错误是:未捕获类型错误:未能在“CanvasRenderingContext2D”上执行“drawImage”:提供的值不是类型(CSSImageValue或HTMLImageElement或SVGImageElement或HTMLVideoElement或HtmlCanvaElement或ImageBitmap或OffscreenCanvas),它位于第163行。如果我搜索该错误,我得到很多点击率。你们读过这些不同的页面,看看它们是否回答了你们的问题吗?是的,我读过几页,但似乎并没有一页对你们有帮助。我已经把代码剥了回去,这样更容易理解,而且仍然有相同的错误。这会使它更容易吗?错误在这一行:
c.drawImage(bushData[i].image,bushData[i].x,GROUND\u Y-bushData[i].Y)
bushData变量包含如下对象数组:
{x:number,y:number,image:undefined}
由于image未定义,因此无法在画布上绘制。您缺少应该在其中初始化这些属性的部分。@DanielAlessandra,但我将这些图像与html文档放在同一文件夹中,并且在这部分中定义了图像:
generatedBushData.push({x:bushX,y:80+Math.random()*20,图像:bushImage
对吗?