我试图将我用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;,不是吗?也许我创建的数组错了?
答案 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;
};