我在创建路径生成算法here时请求了一些帮助,其中Taekahn非常慷慨地帮助我。除了一个部分IsNotMarked
函数之外,我理解他的所有代码。
function IsNotMarked(row, column) {
//if row is out of bounds, it is not marked
if (row < 0 || row >= matrix.length) return true;
//if column is out of bounds, it is not marked
if (column < 0 || column >= matrix[row].length) return true;
//if ahead node (east of East Node) is not part of path... it's not marked
return matrix[row][column].data('partOfPath') != true;
}
即:return matrix[row][column].data('partOfPath') != true;
上面IsNotMarked()
,CreateNewFrontier()
的函数应该检查每个方向(北,东,南,西)的相邻节点,首先检查它们是否在边界内......
然后AddToFrontier()
应检查邻近那些节点(东节点以东的节点)的节点,以检查它们是否未标记(路径的一部分),因为要保持单个路径,一个节点只能有一个邻居。
问题:
1)我尝试更换
return matrix[row][column].data('partOfPath') != true;
与
if (matrix[row][column].data('partOfPath') == false) return true;
我认为意思相同,但它只标记根节点并且不起作用。这两个有什么不同?这不是真的吗,如果该节点不是路径的一部分,那么将IsNotMarked
返回为真?
2)我还尝试通过简单地检查节点是否是IsNotMarked()
中直接路径的一部分来完全删除AddToFrontier()
来简化它,但现在根本没有绘制:
if (row - 1 >= 0 && matrix[row-1][column].data('partOfPath') == true) { //check if it IS marked...
markedNeighbors++;
}
任何帮助都会很棒!
答案 0 :(得分:1)
matrix[row][column].data('partOfPath')
既不是真也不是假(例如null
或undefined
),就会出现差异。
在这种情况下,以下语句返回true
:
return matrix[row][column].data('partOfPath') != true;
但是以下内容返回false(注意你还需要else语句):
if (matrix[row][column].data('partOfPath') == false)
return true;
else
return false;