3

単純なJavaScript2D(キャンバス)ゲームでA*パスファインディングスクリプトを使用しています。ゲームをSSCCEに分解しました。とにかく、私のゲームは横に15列、下に10行です。

何が問題ですか?グラフを設定すると、ノードは横に11回、上下に10回しか設定されません。X軸は、表示されるときまでである必要が15ありgrid.lengthます11。OK、それで私の問題があります。私はに含まれるgrid返品です。arraySSCCE

これが私の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 - 11 Tiles (Y)
        // LEFT to RIGHT - 16 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[1][2]; // X: 1, Y: 2
        end = graph.nodes[12][7]; // X: 12, Y: 7
        result = astar.search(graph.nodes, start, end);
    });
</script>
</head>
<body>
Loading... pathfinding. Look in Chrome Console/Firefox Firebug for more information.
</body>
</html>

ご覧のとおり、私の行は上下に、列gridは横に並んでいます。しかし、私はそれをそのように解釈していません。1116graph

ここで全体を参照してください:http graphstar.js//pastebin.com/KfS9ALFq(ここastar.jsに完全なパッケージがあります:http://pastebin.com/8WyWnTpQ

これはそれがレイアウトされている場所ですgraphstar.js

function Graph(grid) {
    var nodes = [];

    var row, rowLength, len = grid.length;
    console.log("Length:" + len);
    for (var x = 0; x < len; ++x) {
        row = grid[x];
        rowLength = row.length;
        nodes[x] = new Array(rowLength);
        for (var y = 0; y < rowLength; ++y) {
            nodes[x][y] = new GraphNode(x, y, row[y]);
        }
    }

    this.input = grid;
    this.nodes = nodes;
}

ご覧のとおり、forループはgrid.lengthlen)にのみ移動します。これは、行が下11にあるためです。11しかし、それがX軸です。軸のマップは列を横切ってX行き、軸は行を下にしています。15Y16

今、あなたは言います...なぜあなたは軸の周りを切り替えてみませんか?やってみました。のように、XそしてY切り替えられています。しかし、私が得るのはUncaught TypeError: Cannot set property '0' of undefinedline 24nodes[x][y] = new GraphNode(x, y, row[y]);

Xグラフが'最高軸がで15あり、Y'最高軸がであるようにグラフが設定されるようにするにはどうすればよい10ですか?

4

1 に答える 1

1

編集:あなたが言っていたことを誤解しました。

forループを反復処理する方法を変更するだけで、1つ下がって、1つ下がって、1つ下がるようになります。

var row, rowLength, len = grid.length;
for(y = 0; y == len - 1; ++y) {
    row = grid[x];
    rowLength = row.length; // Expected: 16;
    nodes[y] = new Array(len);
    for (var x = 0; x == rowlength - 1; ++x){

            //figure out your nodes[y][x] here;
    }
}
于 2012-05-06T04:27:48.137 に答える