为了A *寻路,我正在创建150 x 150 GKGridGraph
。>
var graph = GKGridGraph(fromGridStartingAt: int2(0, 0), width: 150, height: 150, diagonalsAllowed: true)
然后,我遍历参考地图图像的像素,并将节点添加到要从图形中删除的数组。
func getWalls(navMap: [bool], width: Int, height: Int) -> [GKGridGraphNode] { var walls = [GKGridGraphNode]() for(index, value) in navMap.enumberated() { if(!value) { continue } let x = index % width let y = index / width if let node = graph.node(atGridPosition: vector_int2(Int32(x),Int32(y))) { walls.append(node) } } return walls }
到目前为止,一切都很正常,但是当我尝试从图形中删除墙时,我的程序就挂了很长时间。
graph?.remove(walls)
让我感到惊讶的是,一旦设置好图形,网格上的A *寻路就会非常快。虽然我期望在如此大的网格上寻路可能会很慢,但令我惊讶的是,简单地删除大量节点会导致如此大的性能损失。
所以我的问题是为什么会从GKGridGraph删除节点集合导致这种速度变慢,并且是否有更高效的方法来实现此操作?
为了A *寻路,我正在创建150 x 150 GKGridGraph。 var graph = GKGridGraph(fromGridStartingAt:int2(0,0),宽度:150,高度:150,对角线允许:真)然后循环...
您找到答案了吗?我遇到了同样的问题