Поиск пути в сетке с GameplayKit

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

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

введите описание изображения здесь

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

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

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

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


person Garry Pettet    schedule 15.07.2016    source источник
comment
Что такое плитка? Это SKSpriteNode? Какое измерение вы хотите, чтобы он имел? Вы используете библиотеку 3D-деталей для TileMap? Как вы можете двигать своим персонажем? Что такое стена? После вашего вопроса у меня есть больше вопросов, чем у вас, поэтому, пожалуйста, опубликуйте код, некоторые детали, этот вопрос кажется ТВ-викториной.   -  person Alessandro Ornano    schedule 16.07.2016


Ответы (1)


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

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

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

person Whirlwind    schedule 03.08.2016
comment
Привет, я хочу создать реализацию поиска пути в произвольном графе, как указано в документации Apple. developer.apple.com/library/content/documentation/ Общие / У вас есть для этого образец кода? - person Mago Nicolas Palacios; 13.01.2017