私はA* pathfinding scriptを単純なJavaScriptの2D(キャンバス)ゲームで使用しています。私はSSCCEに私のゲームを壊した。とにかく、私のゲームは縦15列、下10行です。JavaScript - forループでxとyが正しく割り当てられない
問題が何ですか?グラフを設定すると、for
ループ内の単純なfor
ループを使用して、15と10のダウンボードを設定すると、nodes
が正しく設定されています。
だから私はページをロードするとき、私はこのエラーを取得:Uncaught TypeError: Cannot read property '5' of undefined
あなたは5
(Y
)を変更した場合、エラーの数字が変更されます。このラインstart = graph.nodes[12][5];
(以下SSCCE
から)からのものであること。
ここは私の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
です。しかし私のはそれをそのように解釈しません。
は、ここに全体graphstar.js
を参照してください:http://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
はまだ未定義与えるしかし、私は右のそれをグラフ化だと思います。ループ上
'row = grid [x]'? 'row = grid [y]'ではなく? – Imp
それは悲しいことに違いない。まだ同じエラー。 :\ – nn2