Я создаю 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 вызывает такое замедление, и есть ли более эффективный способ реализации этой операции?