在javascript中使用2D数组有点麻烦

时间:2014-12-09 02:08:33

标签: javascript jquery arrays html5 phaser-framework

我试图将我用Java制作的基本游戏转换为HTML5用于学习目的;但是我遇到了一些麻烦,我会提供一个可运行的例子,但我使用的是Phaser引擎,我的代码非常分散。我试图在Javascript中遵循OO方法,无论哪种方式都是我的代码。

创建数组:

function newArray2D(rows, columns) {
    var x = new Array(rows);
    for(var i = 0; i < rows; i++) {
        x[i] = new Array(columns);
    }
    return x;
}

-

tiles = newArray2D(Math.ceil(game.width / 64), Math.ceil(game.height / 64));

填充数组:

for(var x = 0; x < tiles.length; x++) {
    for(var y = 0; y < tiles[0].length; y++) {
        tiles[x][y] = new Tile(x * 64, y * 64);
    }
}

Tile&#34; class&#34;:

var x, y, width, height;

function Tile(x, y) {
    this.x = x;
    this.y = y;
    this.width = 64;
    this.height = 64;
}

function hovering(mouseX, mouseY) {
    if((mouseX > x && mouseX < (x + width)
            && mouseY > y && mouseY < (y + height))) {
        return true;
    }
    return false;
}

错误:

  

未捕获的TypeError:undefined不是函数

导致错误的代码:

for(var x = 0; x < tiles.length; x++) {
    for(var y = 0; y < tiles[0].length; y++) {
        if(tiles[x][y].hovering(game.input.mousePointer.x, game.input.mousePointer.y)) {
            tileDebug.text = 'Tile('+x+','+y+')';
        }
    }
}

触发错误的代码行:

if(tiles[x][y].hovering(game.input.mousePointer.x, game.input.mousePointer.y)) {

我不确定问题是什么,因为调试控制台并没有提供比#34更多的信息;未定义不是函数&#34; ...但是函数I&# 39; m呼叫是&#34;徘徊&#34;,不是吗?也许我创建的数组错了?

2 个答案:

答案 0 :(得分:3)

您尚未将hovering方法分配到Tile&#34;类&#34;的prototype。试一试:

Tile.prototype.hovering = function(mouseX, mouseY) {
    if((mouseX > this.x && mouseX < (this.x + this.width)
            && mouseY > this.y && mouseY < (this.y + this.height))) {
        return true;
    }
    return false;
}

或者,您可以按原样保留hovering的定义,并将Tile对象作为附加参数传递。

答案 1 :(得分:0)

您已将hovering创建为全局JS命名空间中的函数。

尝试将函数声明更改为:

newArray2D.hovering = function (mouseX, mouseY) {
    if((mouseX > x && mouseX < (x + width)
            && mouseY > y && mouseY < (y + height))) {
        return true;
    }
    return false;
};