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);
}
}
我的javascript对象中有一个2d的图片数组。如果我使用新的Image()在我的构造函数中创建对象,它的工作完美,我可以在我的drawout()函数中绘制。但是如果我在我的load_map()函数中将Image()对象传递给我的数组(因为xmlhttp会在它内部创建的函数中丢失它,如果我的xmlhttp完成了,那么我将得到这个)错误:
未捕获TypeError:无法在'CanvasRenderingContext2D'上执行'drawImage':提供的值不是'(HTMLImageElement或HTMLVideoElement或HTMLCanvasElement或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 1
在我的情况下是64x64。
我希望我的问题很明确,我这样做的方式是错误的,但是我想在我重新编写代码之前理解这个错误,不要没有任何理由加载这么多图像,因为它们都是一样的。
如果你问任何一个,我会立即回应。