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