我正在尝试制作一个简单的配色游戏,我想找到一种方法来选择相同颜色的块组。
这是我正在研究的fiddle,如果你运行它,你会发现当我试图将鼠标悬停在游戏区域边缘的元素时会出现问题,告诉我它正在尝试使用未定义的变量
如果你在下面查看,在parse_quad_tree()
功能你会看到我处理未定义的变量的情况,但是因为它刹车了,这意味着我在某处错了...
感谢您的时间
答案 0 :(得分:5)
你的2d数组实际上是嵌套数组。您只需要检查可能超出范围的数组级别:
var n = !!grid[x][y-1]?grid[x][y-1]:false;
var s = !!grid[x][y+1]?grid[x][y+1]:false;
var e = !!grid[x-1]?grid[x-1][y]:false; // Instead of !!grid[x-1][y]
var w = !!grid[x+1]?grid[x+1][y]:false; // Instead of !!grid[x+1][y]
换句话说,当您执行array[x][y]
时,javascript首先检索array[x]
,然后在该检索到的数组中查找索引[y]
。在您的情况下,第一个查找未定义(grid[x-1]
),因此无法查找grid[x-1][y]
。当第一步未定义时,您正在检查最后一步的未定义。
演示:http://jsfiddle.net/jtbowden/qWktv/
此外,如果$(c).addClass('active')
开头parse_quad_tree
,您将能够突出显示单个块,而不必为每个邻居调用`.addClass('active')因为它会在递归开始时发生。
答案 1 :(得分:2)
在调用子数组之前,您没有检查第一个数组var是否存在,更改
var e = grid[x-1]&&!!grid[x-1][y]?grid[x-1][y]:false;
var w = grid[x+1]&&!!grid[x+1][y]?grid[x+1][y]:false;
答案 2 :(得分:2)
你需要检查你的界限
var n = !! (y > 0 && grid[x][y - 1]) ? grid[x][y - 1] : false;
var s = !! (y < grid[x].length-1 && grid[x][y + 1]) ? grid[x][y + 1] : false;
var e = !! (x > 0 && grid[x - 1][y]) ? grid[x - 1][y] : false;
var w = !! (x < grid.length-1 && grid[x + 1][y]) ? grid[x + 1][y] : false;
演示
答案 3 :(得分:0)
不使用var colors = ['red', 'green', 'blue'];
作为颜色,而是使用三种不同的css类和颜色集。这样,当您需要选择所有这些内容时,就像$(".blue")
一样简单。