Реализация RPG Maker Auto Tiling

8

В настоящее время я работаю с Phaser, создавая игру, которая генерируется процедурно. Я хотел использовать в своей игре некоторые RPG Maker Art (для справки, я использую RTP). Я наткнулся на эту статью , в которой рассказывается, как работают автоматические плитки. Я также наткнулся на этот ответ, который ссылается на другую статью, которая объясняет автоматическое разбиение на листы.

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

Я создал генератор карт (см. Здесь ) и хотел создать бесшовную связь между моими областями плиток. Например, коричневые области будут «плотными» (леса, пещеры и т. Д.). Фиолетовые области - это каменные полы, а зеленая - трава. Существует набор плиток, который очень хорошо работает для таких вещей:

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

Поэтому я хотел бы использовать верхнюю левую траву и третий набор плиток - камень, который соединяется с травой.

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

Seiyria
источник
Tiled - это редактор карт с открытым исходным кодом, который имеет автоматическую реализацию. Вы можете попытаться найти реализацию в исходном коде .
Филипп
Хотя парадигмы @Philipp Tiled и RPGMaker отличаются друг от друга. Tiled позволяет вам указать четыре угла плитки как определенный тип местности («песок», «трава», «вода» и т. Д.) И выбрать соответствующую плитку на основе этого. RPGMaker позволяет вам указывать центры плитки как определенный вариант, окруженный типом (например, «песок в траве», «вода в траве» и т. Д.). Слои используются для устранения этого ограничения в обоих случаях. Конечно, трансформация возможна; вот, например, использование REFMAP sand-in-grass (с травяной подкладкой): i.imgur.com/Z343MVq.png
Мартин Сойка
2
Для справки: ресурсы RTP лицензируются только для использования с соответствующим программным обеспечением и другими версиями RPG Maker. Это прекрасно , как заполнитель в процессе разработки, но вы будете должны заменить их другой графический набор для распределения - например , набор REFMAP или графику на основе Кубка освобожденной Pixel.
Мартин Сойка,
Спасибо за внимание @MartinSojka - К счастью или к несчастью, RPG Maker предоставляет лучший полный набор художественных работ для работы (плитки, лица, спрайты, эффекты и т. Д.), Но я ограничиваю то, что использую, так что я могу Прикрой мои базы, когда придет время их заменить. Я просто не хотел часами искать искусство, когда мог программировать. Спасибо за информацию о Liberated Pixel Cup, я рассмотрю это позже. FWIW, я не планирую продавать эту игру, но если я сделаю это, я определенно заменю искусство.
Сейрия

Ответы:

1

Я реализовал это (используя RTP) простым (но довольно утомительным) способом.

Я взял список всех соседей для текущей ячейки, и с большим количеством ifутверждений я нарисовал плитку как 4 меньших / четверть плитки.

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

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

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


Отвечая на ваш комментарий:

Рендеринг только четверть плиток, возможности резко уменьшаются.

Вам не нужно обрабатывать плитки на плитках, так как они должны быть на разных слоях, которые могут быть скруглены или окрашены друг в друга.

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

Карта обычно статична, а изображения имеют низкое разрешение, поэтому не нужно беспокоиться о производительности.

akaltar
источник
Я очень увлекался использованием битовых масок, пока не увидел, что сложность возрастает с каждой возможной соседней плиткой. Глядя на RTP, я не могу точно определить, сколько будет возможных случаев, учитывая, что некоторые плитки могут быть уложены на другие плитки, а некоторые плитки имеют встроенных соседей.
Сейрия
@Seirya Отредактированный ответ.
Акалтар
спасибо за обновление. Одна вещь, хотя - если вы посмотрите на набор плиток выше, вы можете увидеть, что некоторые плитки имеют встроенных соседей, таких как плитки на песке или траве на траве. Для некоторых плиток, таких как водные, которые могут быть размещены на чем угодно, это не является проблемой.
Сейрия