我在一个简单的 JavaScript 2D(画布)游戏中使用A* 寻路脚本。我将我的游戏分解为SSCCE。无论如何,我的游戏有 15 列和 10 行。
问题是什么?设置图表,我在一个循环中nodes
使用一个简单的循环来正确设置(或者我认为),以设置一个 15 跨板和 10 块板。for
for
所以当我加载页面时,我得到这个错误:Uncaught TypeError: Cannot read property '5' of undefined
那是从这一行start = graph.nodes[12][5];
(从SSCCE
下面)开始,如果您更改5
(Y
),那么错误中的数字将会改变。
这是我的SSCCE
。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type='text/javascript' src='graphstar.js'></script>
<script type="text/javascript">
var board;
</script>
<script type='text/javascript' src='astar.js'></script>
<script type="text/javascript">
$(document).ready(function()
{
// UP to DOWN - 10 Tiles (Y)
// LEFT to RIGHT - 15 Tiles (X)
graph = new Graph([
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1],
[1, 13, 1, 13, 13, 13, 13, 13, 1, 1, 1, 1, 1, 13, 13, 1],
[1, 13, 1, 1, 13, 1, 1, 13, 1, 13, 13, 1, 13, 13, 13, 1],
[1, 13, 13, 1, 1, 1, 13, 13, 1, 13, 13, 1, 1, 1, 13, 1],
[1, 13, 13, 1, 13, 1, 13, 13, 13, 13, 13, 1, 13, 13, 13, 1],
[1, 13, 13, 13, 13, 1, 13, 13, 13, 13, 13, 1, 13, 13, 13, 1],
[1, 13, 1, 13, 13, 13, 13, 13, 1, 1, 1, 1, 13, 13, 13, 1],
[1, 13, 1, 1, 1, 1, 13, 13, 13, 13, 1, 13, 13, 13, 13, 1],
[1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]);
//Let's do an example test.
start = graph.nodes[12][5]; // X: 12, Y: 5
end = graph.nodes[2][4]; // X: 2, Y: 4
result = astar.search(graph.nodes, start, end);
});
</script>
</head>
<body>
Loading... pathfinding. Look in Chrome Console/Firefox Firebug for more information.
</body>
</html>
如您所见,我grid
的10
上下行和16
列。然而,我graph
并没有那样解释它。
在这里查看全部内容:http graphstar.js
: //pastebin.com/xUwghjRR(这里是astar.js
完整包: http: //pastebin.com/YMBtX66W)
这是它的布局graphstar.js
:新更新
function Graph(grid) {
var nodes = [];
var row, rowLength, len = grid.length;
for(var y = 0; y < len; ++y){
row = grid[y];
rowLength = row.length; // Expected: 16;
nodes[y] = new Array(len);
for (var x = 0; x == rowLength - 1; ++x){
nodes[y][x] = new GraphNode(x, y, row[y]);
}
}
this.input = grid;
this.nodes = nodes;
}
如您所见,for
循环是通过查看grid
. grid
长度应该输出到11
哪个是正确的,因为我们Y
首先循环轴。然后按row
应该输出16
正确的长度,从那时起我们正在做X
轴。
因此,当我启动页面时,我收到此错误:
所以......我想我把它画在了正确的位置,但是我X
仍然Y
给出了未定义的。