Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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
javascript中的2D数组有点麻烦_Javascript_Jquery_Arrays_Html_Phaser Framework - Fatal编程技术网

javascript中的2D数组有点麻烦

javascript中的2D数组有点麻烦,javascript,jquery,arrays,html,phaser-framework,Javascript,Jquery,Arrays,Html,Phaser Framework,我正在尝试将我用Java制作的一个基本游戏转换为HTML5,以便于学习;但是我有一点小麻烦,我会提供一个可运行的例子,但是我使用的是相量引擎,我的代码非常分散。我试图在Javascript中遵循OO方法,不管怎样,这是我的代码 创建数组: function newArray2D(rows, columns) { var x = new Array(rows); for(var i = 0; i < rows; i++) { x[i] = new Array(

我正在尝试将我用Java制作的一个基本游戏转换为HTML5,以便于学习;但是我有一点小麻烦,我会提供一个可运行的例子,但是我使用的是相量引擎,我的代码非常分散。我试图在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;
}
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);
    }
}
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;
}
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)) {
填充数组:

function newArray2D(rows, columns) {
    var x = new Array(rows);
    for(var i = 0; i < rows; i++) {
        x[i] = new Array(columns);
    }
    return x;
}
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);
    }
}
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;
}
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)) {

我不确定问题是什么,因为调试控制台并没有提供比“未定义不是函数”更多的信息。。。但是我调用的函数是“悬停”,不是吗?也许我创建的数组是错误的

您尚未将
悬停
方法指定给
磁贴
的“类”。尝试一下:

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;
}
Tile.prototype.hovering=函数(mouseX,mouseY){
if((mouseX>this.x&&mouseX<(this.x+this.width)
&&mouseY>this.y&&mouseY<(this.y+this.height))){
返回true;
}
返回false;
}

或者,您可以保持
悬停
的定义不变,并将
平铺
对象作为附加参数传递。

您已经创建了
悬停
作为全局JS命名空间中的函数

尝试将函数的声明更改为:

newArray2D.hovering = function (mouseX, mouseY) {
    if((mouseX > x && mouseX < (x + width)
            && mouseY > y && mouseY < (y + height))) {
        return true;
    }
    return false;
};
newArray2D.hovering=函数(mouseX,mouseY){
如果((mouseX>x&&mouseX<(x+宽度)
&&鼠标>y&&鼠标<(y+高度))){
返回true;
}
返回false;
};

谢谢,您编辑时我正要询问原型链接,现在的问题是x/y也未定义,
调用(未定义,未定义)
console.log(“调用(“+x+”,“+y+”)时打印
以悬停方法运行。此外,与代码本身有点无关,但通过一点巧妙的数学运算,您可以只计算悬停在哪个磁贴上,而不会在所有磁贴上循环(这可能会很低效)。谢谢!prototype链接没有很好地解释为什么使用'this'关键字,在Java中,它用于获取类范围内变量的实例,但它不是必需的,它在这里是否具有相同的功能,但它是必需的?是的,可能可以,我只是使用它来确保所有内容都安排正确,在进入渲染之前。
这个
在Javascript中具有类似于Java的功能,但它确实是必需的。