удаление массива GKGridGraphNodes из GKGridGraph неожиданно медленно - PullRequest
0 голосов
/ 07 января 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...