В настоящее время я работаю с Phaser, создавая игру, которая генерируется процедурно. Я хотел использовать в своей игре некоторые RPG Maker Art (для справки, я использую RTP). Я наткнулся на эту статью , в которой рассказывается, как работают автоматические плитки. Я также наткнулся на этот ответ, который ссылается на другую статью, которая объясняет автоматическое разбиение на листы.
Вот в чем дело, я понятия не имею, как бы я реализовал что-то подобное. Я уверен, что мне нужно было бы отслеживать, какие наборы плиток могут соединяться с какими другими наборами плиток (то есть некоторые плитки имеют траву снаружи и песок внутри, поэтому в этом примере я должен отметить, что трава "плитки были внешними плитками).
Я создал генератор карт (см. Здесь ) и хотел создать бесшовную связь между моими областями плиток. Например, коричневые области будут «плотными» (леса, пещеры и т. Д.). Фиолетовые области - это каменные полы, а зеленая - трава. Существует набор плиток, который очень хорошо работает для таких вещей:
Поэтому я хотел бы использовать верхнюю левую траву и третий набор плиток - камень, который соединяется с травой.
Какие вещи я должен учитывать при реализации автоматического разбиения на листы с использованием таких наборов плиток, и есть ли алгоритм, на который я могу обратить внимание, чтобы реализовать?
Ответы:
Я реализовал это (используя RTP) простым (но довольно утомительным) способом.
Я взял список всех соседей для текущей ячейки, и с большим количеством
if
утверждений я нарисовал плитку как 4 меньших / четверть плитки.Для меня этот метод приводит к некоторым едва видимым ошибкам, но их можно устранить, протестировав некоторые крайние случаи и исправив их соответствующим образом.
Если вы посмотрите на исходные изображения и получившееся изображение в RPG Maker, вы должны быть в состоянии сделать это (возможно, с некоторыми пробами и ошибками) с помощью
if
утверждений, идентифицирующих текущий случай для данного квартала и рисуя соответственно ,Этот метод может быть дополнительно улучшен и сделан менее утомительным с помощью битовых масок (как упомянуто jzx).
Отвечая на ваш комментарий:
Рендеринг только четверть плиток, возможности резко уменьшаются.
Вам не нужно обрабатывать плитки на плитках, так как они должны быть на разных слоях, которые могут быть скруглены или окрашены друг в друга.
Кроме того, я не понимаю, зачем вам нужны встроенные соседи, но это можно было бы обрабатывать отдельно в расчете соседей, возможно, с использованием какого-то вида карт (список пар, которые смешиваются).
Карта обычно статична, а изображения имеют низкое разрешение, поэтому не нужно беспокоиться о производительности.
источник