GKGraph GKGraphNode GKGridGraphNode, какие у них отношения?
Я прочитал документ, но все еще не понял, может ли какой-нибудь парень дать мне чёткое объяснение, например, сравнение изображений? Благодарю.
1 ответ
Может помочь статья в Википедии о поиске путей, а также связанные с ней темы о графиках и алгоритмах поиска по ссылкам. Кроме того, вот попытка быстрого объяснения.
Узлы - это места, в которых кто-то может находиться, и их соединения с другими узлами определяют, что кто-то может путешествовать между местами. Вместе совокупность (связанных) узлов образует график.
GKGraphNode
это самая общая форма узла - эти узлы ничего не знают о том, где они находятся в пространстве, только о своих соединениях с другими узлами. (Этого достаточно для базового поиска пути, хотя... если у вас есть график, где A подключен к B, а B подключен к C, путь от A к C проходит через B независимо от того, где расположены эти узлы, как показано ниже.)
GKGraph
представляет собой набор узлов и предоставляет функции, которые работают с графом в целом, как важная функция для поиска путей.
GKGridGraphNode
а также GKGraphNode2D
являются специализированными версиями GKGraphNode
которые добавляют знание положения узла в пространстве - либо целочисленное пространство сетки (например, шахматная доска), либо открытое 2D-пространство. После того, как вы добавили такую информацию, GKGraph
содержащие эти виды узлов могут учитывать расстояние при поиске пути.
Например, посмотрите на это изображение:
Если мы просто используем GKGraphNode
все, о чем мы говорим, это о том, какие узлы к чему Поэтому, если мы попросим кратчайший путь от A до D, мы можем получить либо ACD, либо ABD, потому что в любом случае это определенное количество соединений. Но если мы используем GKGridGraphNode
или же GKGraphNode2D
, мы смотрим на длину линий между узлами, и в этом случае ACD является кратчайшим путем.
Как только вы начинаете размещать свои узлы в (своего рода координате) пространстве, это помогает иметь возможность работать с графом в целом в этом пространстве. Это где GKGridGraph
а также GKObstacleGraph
заходи.
GKGridGraph
работает сGKGridGraphNode
s и позволяет вам делать такие вещи, как создание графика для заполнения набора измерений (скажем, сетки 10x10, с разрешенным диагональным перемещением) вместо того, чтобы заставлять вас создавать и подключать группу узлов самостоятельно.GKObstacleGraph
добавляет больше к графикам в свободном 2D-пространстве, позволяя вам отмечать области как непроходимые препятствия и автоматически управлять узлами и соединениями для обхода препятствий.
Надеюсь, это немного поможет. Более того, помимо справочных документов и руководства, у Apple также есть видео WWDC, которое показывает, как работает этот материал.