シンプルな JavaScript 2D (キャンバス) ゲームでA* パスファインディング スクリプトを使用しています。ゲームをSSCCEに分解しました。とにかく、私のゲームは横 15 列、下 10 行です。
何が問題ですか?グラフの設定では、ループ内の単純なループを使用して 15 のアクロスと 10 のダウン ボードを設定して、nodes
正しく (またはそう思うように)設定しました。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
ここで全体を参照してgraphstar.js
ください: http://pastebin.com/xUwghjRR (astar.js
完全なパッケージはこちら: http://pastebin.com/YMBtX66W )
これは、次の場所に配置されている場所ですgraphstar.js
。NEWLY UPDATED
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
まだ定義されていません。