javascript中的2D数组有点麻烦
我正在尝试将我用Java制作的一个基本游戏转换为HTML5,以便于学习;但是我有一点小麻烦,我会提供一个可运行的例子,但是我使用的是相量引擎,我的代码非常分散。我试图在Javascript中遵循OO方法,不管怎样,这是我的代码 创建数组: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(
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的功能,但它确实是必需的。