Javascript 在HTML5蛇游戏中为食物生成随机位置时出现未捕获类型错误
我目前正在用Javascript在HTML5画布上制作一个多人蛇游戏 下面的代码是处理蛇食物随机放置的函数。这段代码的问题是,它在映射[x][y]时给了我x和y;即使它产生了一个随机数,他也无法阅读 这就是确切的错误:Javascript 在HTML5蛇游戏中为食物生成随机位置时出现未捕获类型错误,javascript,html,canvas,scope,while-loop,Javascript,Html,Canvas,Scope,While Loop,我目前正在用Javascript在HTML5画布上制作一个多人蛇游戏 下面的代码是处理蛇食物随机放置的函数。这段代码的问题是,它在映射[x][y]时给了我x和y;即使它产生了一个随机数,他也无法阅读 这就是确切的错误: "Uncaught TypeError: Cannot read property '20' of undefined" “20”是随机生成的数字,是二维数组中食物的网格位置,每次我重新启动程序或刷新网页时都会发生变化。有人能解释一下我需要什么样的改变来定义x和y并放置
"Uncaught TypeError: Cannot read property '20' of undefined"
“20”是随机生成的数字,是二维数组中食物的网格位置,每次我重新启动程序或刷新网页时都会发生变化。有人能解释一下我需要什么样的改变来定义x和y并放置我的食物吗
function rand_food(){
var x, y;
do {
x = MR() * this.rect_w|0;
y = MR() * this.rect_h|0;
}
while (map[x][y]); <-- Here is the error
map[x][y] = 1;
this.ctx.strokeRect(x * 10+1, y * 10+1, 8, 8);
}
下面是定义映射的另一个代码段
this.map = [];
// Map positions
//*
for (i = 0; i < this.rect_w; i++){
map[i] = [];
}//*/
在尝试了肖恩的建议之后,我的代码现在看起来是这样的:但它仍然给我同样的错误。还有其他建议吗
function SnakeGame(){
this.map = [];
for (i = 0; i < this.rect_w; i++){
this.map[i] = [];
}
function rand_food(){
var x, y;
console.log("Map length: " + this.map.length);
do {
x = MR() * this.rect_w|0;
y = MR() * this.rect_h|0;
console.log("x: " + x);
console.log("y: " + y);
}
while (this.map[x][y]);
this.map[x][y] = 1;
this.ctx.strokeRect(x * 10+1, y * 10+1, 8, 8);
}
地图和地图不是一回事
如果您位于对象内部,则this.map是该对象的公共变量,map是局部变量
试着这样做:
this.map = [];
// Map positions
for (var i = 0; i < 10; i++){
this.map[i] = [];
}
如果未定义映射,通常会出现引用错误,因此映射已定义,但可能: 没有分配给任何东西 使用后定义/分配 通过在不执行的条件下定义的Being提升 范例
if (0) {
var foo = 1;
}
console.log(foo) //= undefined
console.log(foo[20]) // TypeError…
console.log(bar) // ReferenceError…
另请参见,以了解稍微不同的方法MR函数this.rect和this.ctx如何?这些都应该在包含对象中声明,您现在似乎已经制作了SnakeGame。这是一篇关于javascript中OO的介绍性文章,可能有助于澄清问题。MR函数是一个局部变量,rect_w和rect_h是公共变量,ctx也是公共变量。我用这个把他们都公开了。但到目前为止,一切都不起作用。谢谢你的文章,我刚读过,但这并没有给我的问题带来多大帮助。我现在将继续为这个问题伤脑筋。再次感谢您的时间。是否可以链接到您拥有的公开版本,以便我们可以在上下文中查看代码?好的,很抱歉我的回复太晚,但我昨天没有时间再查看它了。还有其他事情要做。你可以在这里下载这个项目。打开.rar,查看Snake2.html和snake.JS的JS文件夹。这些是我正在处理的文件。谢谢你抽出时间。
if (0) {
var foo = 1;
}
console.log(foo) //= undefined
console.log(foo[20]) // TypeError…
console.log(bar) // ReferenceError…