Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象中img错误的Javascript 2d数组_Javascript - Fatal编程技术网

对象中img错误的Javascript 2d数组

对象中img错误的Javascript 2d数组,javascript,Javascript,我的javascript对象中有一个2d图片数组。如果我在构造器中用新的图像创建对象,它会工作得很好,我可以在drawout函数中进行绘制。但如果我在load_map函数中将图像对象设置为我的数组,需要将其作为对象传递,因为xmlhttp会在其内部创建的函数中丢失该对象。如果我的xmlhttp完成,则会出现以下错误: 未捕获类型错误:未能对“CanvasRenderingContext2D”执行“drawImage”:提供的值不是“HTMLImageElement或HTMLVideoElemen

我的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

我希望我的问题是清楚的,我这样做是错误的,但我想在重新编写代码之前理解这个错误,以避免无任何理由加载这么多图像,因为它们都是相同的


如果你问任何问题,我都会立即回答。

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);

    }
}