Поиск пути по сетке с помощью GameplayKit

Я экспериментирую с Apple GameplayKit, SpriteKit и Swift. Я пытаюсь обернуть голову вокруг поиска пути сквозь плитки, которые можно пройти только с одной стороны.

Диаграмма ниже показывает две проблемы:

Слева - простое решение, я понимаю, как перейти из зеленого положения в красное, так как все, что мне нужно сделать, это удалить wall узлы (черные обведенные квадраты) из графика и вычислить путь.

Правая часть диаграммы меня озадачивает. Скажем, я хочу, чтобы плитки располагались вдоль левой стороны (как показано на рисунке), но я все еще хочу иметь возможность перемещаться к плитке со стеной. Как мне сказать графику, что эти плитки со стенами на левой стороне плитки являются проходимыми только при приближении сверху, снизу или справа, а не слева?

В ответ на комментарий Алессандро я расскажу о структуре кода. Я использую новый TileMapNode представил SpriteKit в iOS 10 для представления карты тайлов. Каждая плитка является SKTileDefinition, Пользовательские свойства могут быть установлены на SKTileDefinition (например, я мог бы установить Int представлять, есть ли стена сверху, снизу, слева или справа от плитки). Фактическое представление карты менее важно, чем то, как вы находите путь с помощью GameplayKit. Насколько я вижу, GameplayKit позволяет удалять из графа только непроходимые узлы, но я хочу пометить некоторые узлы как проходимые, но только с определенного направления.

Это кажется мне общей проблемой (так как во многих играх не нужно жертвовать целой плиткой, чтобы представить внутреннюю стену), но у меня нет ни малейшего представления, как это сделать.

1 ответ

У вас есть пара вариантов:

1) Уменьшите размер сетки. Наличие тонких стен говорит о том, что размер вашей сетки может быть меньше (порядка самых маленьких препятствий)

2) Используйте другой тип графика и вообще откажитесь от сетки. GKObstacleGraph или GKMeshGraph хорошо подходят для игрового мира, в котором есть множество произвольных полигональных препятствий.

Другие вопросы по тегам