2012-05-06 4 views
3

간단한 JavaScript 2D (캔버스) 게임에서 A* pathfinding script을 사용하고 있습니다. 내 게임을 SSCCE으로 무너 뜨 렸습니다. 어쨌든 내 게임은 가로 15 열, 세로 10 행입니다.JavaScript - x 및 y 축에 대한 루프

무엇이 문제인가? 그래프를 설정하면 노드는 가로 지 11 배, 세로 10 배로 설정됩니다. 축 번호 X 축은 인 경우에만 11까지 설정하면 최대 15이어야합니다. 좋아, 그래서 내 문제가있다. 내 gridSSCCE에 포함 된 array입니다.

여기 내 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에 걸쳐 11 최대 행과 아래 16 열입니다. 그러나 내 그런 식으로 해석하지 않습니다.

여기에 전체 graphstar.js 참조 : http://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 루프 만 은 11 행이므로 (len)은 11입니다. 하지만 그 축은 X입니다. X 축에 대한 내지도는 15 개의 행을 가지며 Y 축의 행은 16 행입니다.

이제 ... 축을 전환하지 않으시겠습니까? 나는 그것을 시험해 보았다. 마찬가지로 XY이 전환되었습니다. 하지만 얻을 모두이다 line 24에서 Uncaught TypeError: Cannot set property '0' of undefined입니다 nodes[x][y] = new GraphNode(x, y, row[y]);

너무 그래프 X에 따라 '가장 높은 축 15하고 Y'설정에서 가장 높은 축 10이다 내가 할 수 있습니까?

답변

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; 
    } 
} 
+0

내가 얻을 걸쳐 필요 같은

보인다 이것을 실행하는 중에 오류가 발생했습니다. Uncaught TypeError : undefined의 '8'속성을 읽을 수 없습니다. '8'은 'Y'축을 클릭 한 번호입니다. – nn2

관련 문제