Поиск пути по сетке с помощью GameplayKit
Я экспериментирую с Apple GameplayKit, SpriteKit и Swift. Я пытаюсь обернуть голову вокруг поиска пути сквозь плитки, которые можно пройти только с одной стороны.
Диаграмма ниже показывает две проблемы:
Слева - простое решение, я понимаю, как перейти из зеленого положения в красное, так как все, что мне нужно сделать, это удалить wall
узлы (черные обведенные квадраты) из графика и вычислить путь.
Правая часть диаграммы меня озадачивает. Скажем, я хочу, чтобы плитки располагались вдоль левой стороны (как показано на рисунке), но я все еще хочу иметь возможность перемещаться к плитке со стеной. Как мне сказать графику, что эти плитки со стенами на левой стороне плитки являются проходимыми только при приближении сверху, снизу или справа, а не слева?
В ответ на комментарий Алессандро я расскажу о структуре кода. Я использую новый TileMapNode
представил SpriteKit в iOS 10 для представления карты тайлов. Каждая плитка является SKTileDefinition
, Пользовательские свойства могут быть установлены на SKTileDefinition
(например, я мог бы установить Int
представлять, есть ли стена сверху, снизу, слева или справа от плитки). Фактическое представление карты менее важно, чем то, как вы находите путь с помощью GameplayKit. Насколько я вижу, GameplayKit позволяет удалять из графа только непроходимые узлы, но я хочу пометить некоторые узлы как проходимые, но только с определенного направления.
Это кажется мне общей проблемой (так как во многих играх не нужно жертвовать целой плиткой, чтобы представить внутреннюю стену), но у меня нет ни малейшего представления, как это сделать.
1 ответ
У вас есть пара вариантов:
1) Уменьшите размер сетки. Наличие тонких стен говорит о том, что размер вашей сетки может быть меньше (порядка самых маленьких препятствий)
2) Используйте другой тип графика и вообще откажитесь от сетки. GKObstacleGraph или GKMeshGraph хорошо подходят для игрового мира, в котором есть множество произвольных полигональных препятствий.