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

时间:2015-08-29 12:03:01

标签: javascript

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。

我希望我的问题很明确,我这样做的方式是错误的,但是我想在我重新编写代码之前理解这个错误,不要没有任何理由加载这么多图像,因为它们都是一样的。

如果你问任何一个,我会立即回应。

0 个答案:

没有答案