JavaScript - for 循环不能正确分配 x 和 y
JavaScript - for loop does not correctly allocate the x and y
我在一个简单的JavaScript 2D(画布(游戏中使用A*寻路脚本。我把我的游戏分解为SSCCE。无论如何,我的游戏是 15 列和 10 行。
问题出在哪里?设置图形时,我使用for
循环中的简单for
循环正确设置了nodes
(或者我认为是这样(,以设置一个 15 横板和 10 下板。
因此,当我加载页面时,出现此错误: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
中布局的地方:新更新
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
仍然没有定义。
你在循环中的条件从一开始就是假的,所以它甚至永远不会进入第一个循环,它应该是
for(var y = 0; y < len; ++y){
另外,对GraphNodes
的呼吁可能是使用x
而不是y
编辑:
代码中还有一些其他的小错误,第二个循环需要大写的 L rowLength
和x
的顺序和y
在你保存的新节点对象需要切换nodes[y][x] =
编辑2:
工作函数,请注意,为了便于使用,我删除了对 GraphNodes 的函数调用,还有一些控制台.log您需要删除的调用
function Graph(grid) {
var nodes = [];
var row, len = grid.length;
console.log(len);
for (var y = 0; y < len; ++y) {
console.log(y);
row = grid[y];
console.log(row);
var rowLength = row.length; // Expected: 16;
nodes[y] = new Array(len);
for (var x = 0; x < rowLength; ++x) {
nodes[y][x] = row[x];
console.log(nodes);
}
}
this.input = grid;
this.nodes = nodes;
}
编辑 3:
问题可能是因为所有其他代码都将坐标视为 x,y,而您在此处拥有的循环并存储它们 y,x 如果您像这样更改代码,它应该允许您使用 x,y 保留所有其他代码
function Graph(grid) {
var nodes = [];
var row, len = grid.length;
for (var y = 0; y < len; ++y) {
row = grid[y];
var rowLength = row.length; // Expected: 16;
for (var x = 0; x < rowLength; ++x) {
if(!nodes[x]){
nodes[x] = new Array(len);
}
nodes[x][y] = row[x];
}
}
this.input = grid;
this.nodes = nodes;
}
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 在循环中分配json值时,值被覆盖
- 动态分配GA增强型电子商务跟踪器
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Is onfling available for html, html5
- 如何在jQuery中将函数的输出分配给变量
- Setting default onclick behavior for <img> tag in gene
- 在 JavaScript 中的 for 循环中重新分配变量的目的是什么?
- JavaScript - for 循环不能正确分配 x 和 y
- 在 JS 中的 for 循环中重新分配变量是什么意思
- 如何使用Node.js和Redis为for循环分配全局变量
- For循环javascript没有分配正确的值
- 如何在javascript的for循环中分配onclick
- 从函数分配的变量's在for循环中返回
- 在二维数组中使用for循环分配坐标
- 谷歌浏览器扩展:for loop来分配chrome.tabs.create函数
- 只有 my for 循环中的最后一个数据才会分配
- 如何在for(prop in obj)循环中分配内存,最好的方法是什么