В настоящее время я разрабатываю редактор плит для моего изометрического движка на основе плитки и в настоящее время работаю над функциями автоматического черепицы.Необходим алгоритм для редактора на основе плитки
На этом этапе, основываясь на алгоритме маршевых квадратов и использовании битовой маски, я смог вычислить правильные угловые активы для размещения вокруг типа плитки.
В течение некоторого времени я пытаюсь окружить конкретный тип плитки нижним соответствующим типом плитки. Подумайте, как редактор Starcraft (Staredit) автоматически окружает тип плитки с более низким соответствующим активом.
Обратите внимание на это изображение от StarEdit как высокая трава является более актив, то высокая грязь:
Например, у меня есть 3 активов, заказанные их соответствующей высоты. Подумайте, как актив 3 представляет собой высокую стену, а более низкие активы будут представлять собой нижние стены. Эти активы будут помещены в метаданные. 0 будет представлять собой пустую плитку в метаданных.
(3,2,1)
Сначала 3 актив будет помещен в метаданных на месте, выбранном пользователем.
0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0
0,0,0,0,3,0,0,0,0
0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0
Тогда 3 актива будет окружен 2 активом
0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0
0,0,0,2,2,2,0,0,0
0,0,0,2,3,2,0,0,0
0,0,0,2,2,2,0,0,0
0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0
Наконец, 2 актива будет окруженным 1 активом. Конечный результат должен выглядеть примерно так.
0,0,0,0,0,0,0,0,0
0,0,1,1,1,1,1,0,0
0,0,1,2,2,2,1,0,0
0,0,1,2,3,2,1,0,0
0,0,1,2,2,2,1,0,0
0,0,1,1,1,1,1,0,0
0,0,0,0,0,0,0,0,0
После этого процесса алгоритм autotiling будет выполняться для того, чтобы вычислить правильные активы/углы для каждого значения метаданных.
Другой пример этого будет из этого приложения HTML5. Обратите внимание, как стены являются самыми высокими активами, за ними следуют трава, затем грязь и, наконец, вода. Каждый актив окружен более низким активом. Marching Squares HTML5 Demo
Я изучил алгоритм заполнения заливки, но кажется, что это не относится к тому, что я пытаюсь выполнить.
Если у кого-то есть решение или какой-либо совет по алгоритму, который я должен использовать для выполнения этой задачи, не стесняйтесь отвечать на этот вопрос.
Язык, который я использую для моего двигателя, - Flash As3.