2012-05-05 21 views
2

私は単純なJavaScriptの2D(キャンバス)ゲームでA* pathfinding scriptを使用しています。私はSSCCEに私のゲームを壊した。とにかく、私のゲームは縦15列、下10行です。JavaScript - 未知の型エラー:未定義のプロパティ '0'を設定できません

問題は私が得るエラーです。以下では、ノード間のパスを開始および終了する方法があります。エラーメッセージUncaught TypeError: Cannot set property '0' of undefinedline 15にあります。第15行目は、第2のforループの間にnodes[x][y] = new GraphNode(x, y, row[x]);です。

ここは私の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[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> 

ご覧のとおり、私のゲームはjQueryです。また、graphstar.jsastar.jsがあります。 astar.jsが問題なく動作するので、心配しないでください。 graphstar.jsは私の問題がどこにあるかです。 astar.jsは、nodesなどが配置されている場所です。 graphstar.jsは、地図がグラフ化されている場所です。それはgraphstar.jsにレイアウトされています場所です

function Graph(grid) { 
    var nodes = []; 
    var row, rowLength, len = grid.length; 
    for (y = 0; y <= 15; y++) { 
     row = grid[y]; 
     nodes[y] = new Array(15); 
     for (x = 0; x <= 10; x++) { 
      nodes[x][y] = new GraphNode(x, y, row[x]); 
     } 
    } 
    this.input = grid; 
    this.nodes = nodes; 
} 

だから、あなたが見ることができるように... Yが使用できます(http://pastebin.com/ee6PMzc3ここastar.jsです)http://pastebin.com/5AYRreip

は、ここでは全体 graphstar.jsを参照してください。 10以下。 Xは、 15以下にすることができます。しかし、私はこのエラーが発生しています。

それは XY境界内にあるので、私は end = graph.nodes[12][7]; // X: 12, Y: 7 を入力していては動作するはずです

...しかし私も最初の場所でそれを設定する問題を抱えています。

なぜそれが定義されていませんか?あなたが混ざっあなたの軸を取得している

UPDATE NEW

for (y = 0; y <= 10; y++) { 

    row = grid[y]; 
    nodes[y] = new Array(15); 

    for (x = 0; x <= 15; x++) { 

     console.log("X: " + x + " Y: " + y); 
     //console.log("Row: " + row[x]); 
     nodes[x][y] = new GraphNode(x, y, row[x]); 
    } 
} 

答えて

2

。あなたはnodes[12]取得するとき、そのインデックスに割り当てられた値が存在したことがないているため

function Graph(grid) { 
    var nodes = []; 
    var row, rowLength, len = grid.length; 
    for (y = 0; y <= 15; y++) { 
     row = grid[y]; 
     // Here, you're indexing into `nodes` using `y`, so you're creating 
     // an array at `nodes[0]` through `nodes[15]` 
     nodes[y] = new Array(15); 
     for (x = 0; x <= 10; x++) { 
      // But here you're index into `nodes` using `x` in the first dimension, 
      // so you're filling in `nodes[0][0]` through `nodes[10][15]`, not 
      // `nodes[15][10]`. 
      nodes[x][y] = new GraphNode(x, y, row[x]); 
     } 
    } 
    this.input = grid; 
    this.nodes = nodes; 
} 

したがって、あなたはundefinedを取得します。次に、インデックスを作成してエラーを取得します。

あなたが一貫して1と外側の配列にインデックス付けしていることを確認(ご希望の方、 xまたは y)座標にする必要があり

、および他と内部配列へのインデックスは、(あなたが好む方、yまたはx)座標。

+0

です。私の問題は、「Y」の15列と「X」の10列のインデックスを作成しようとすると...そのエラーが発生します。 – nn2

+0

@weka:うれしいこと、喜んで助けてくれました。 –

+0

はい、問題があります。まだそれを修正しようとしています。 – nn2

関連する問題