对象中img错误的Javascript 2d数组
我的javascript对象中有一个2d图片数组。如果我在构造器中用新的图像创建对象,它会工作得很好,我可以在drawout函数中进行绘制。但如果我在load_map函数中将图像对象设置为我的数组,需要将其作为对象传递,因为xmlhttp会在其内部创建的函数中丢失该对象。如果我的xmlhttp完成,则会出现以下错误: 未捕获类型错误:未能对“CanvasRenderingContext2D”执行“drawImage”:提供的值不是“HTMLImageElement或HTMLVideoElement或HtmlCanvaSeElement或ImageBitmap”drawout@map.js:53drawout@game.js:25mainloop@index:32init@index:27onload@index:40”类型 在构造函数中,我运行load_map;一次,再也没有什么叫它了。在外部循环中经常调用drawout。即使我在load_map函数中创建图像对象,我仍然可以通过一个警报写出我的图像的scr,这对我来说真的很奇怪。我请求的文件是一个地图文件,包含地图的重量和高度以及linel中每个正方形的类型,如: 2. 2. 1. 1. 1. 一, 对我来说是64x64 我希望我的问题是清楚的,我这样做是错误的,但我想在重新编写代码之前理解这个错误,以避免无任何理由加载这么多图像,因为它们都是相同的对象中img错误的Javascript 2d数组,javascript,Javascript,我的javascript对象中有一个2d图片数组。如果我在构造器中用新的图像创建对象,它会工作得很好,我可以在drawout函数中进行绘制。但如果我在load_map函数中将图像对象设置为我的数组,需要将其作为对象传递,因为xmlhttp会在其内部创建的函数中丢失该对象。如果我的xmlhttp完成,则会出现以下错误: 未捕获类型错误:未能对“CanvasRenderingContext2D”执行“drawImage”:提供的值不是“HTMLImageElement或HTMLVideoElemen
如果你问任何问题,我都会立即回答。this.pic[i]=[128];不创建包含128个位置的数组,而是创建一个包含一个条目的数组,即数字128。这不是问题所在,因为您不必预先分配JavaScript数组的长度,因为它们是,但我想我应该提一下。谢谢。所以这个.pic[i]=[];是正确的,即使它不能解决问题,对吗?
function c_map(map_id){
this.n = 0;
this.m = 0;
this.pic = [128];
for(i = 0; i < 128; i++){
this.pic[i] = [128];
for(j = 0; j < 128; j++){
//this.pic[i][j] = new Image();
}
}
this.load_map = function(fnc){
var xmlhttp;
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var lines;
lines = xmlhttp.responseText.split("\n");
fnc.n = parseInt(lines[0]);
fnc.m = parseInt(lines[1]);
var k = 2;
var i;
var j;
for(j = 0; j < fnc.m; j++){
for(i = 0; i < fnc.n; i++){
fnc.pic[j][i] = new Image();
fnc.pic[j][i].src = ""+parseInt(lines[k])+".jpg";
k++;
}
}
alert(i);
}
}
xmlhttp.open("GET","maps/0.map",true);
xmlhttp.send();
}
this.load_map(this);
this.drawout = function(id){
var canvas = document.getElementById("mycanvas").getContext("2d");
canvas.drawImage(this.pic[0][0],100, 600);
canvas.font="16px Georgia";
canvas.fillStyle = "#000000";
canvas.fillText("done" ,300,150);
}
}