从GKGridGraph移除GKGridGraphNodes的数组异常缓慢

问题描述 投票:1回答:1

为了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,对角线允许:真)然后循环...

swift path-finding gamekit
1个回答
0
投票

您找到答案了吗?我遇到了同样的问题

© www.soinside.com 2019 - 2024. All rights reserved.