Наборы тайлов. H Битовый способ отображения тайловых карт Перевод


Тайл - это фактически кусочек картинки. Тайлсет - набор тайлов. Обычно используют квадратные тайлы. С помощью тайлов делают игровое пространство в стратегиях и RPG. Примеры: C&C, WarCraft, Fallout. Под типом тайла понимается принадлежность его к семейству. Например, трава и земля - типы тайлов. Под переходом понимается буквальный переход одного тайла в другой при текстурировании геометрии. Тайл с переходом - это тайл, не являющийся сплошным.

Я выходил на контакт с Blizzard, хотел чтобы они разрешили мне использовать пару их тайлсетов. Но мне ответили, что получить разрешение будет очень сложно, так как тот, кто рисовал текстуры в штате у них не числится, а права на них остаются за этим человеком. Так что я решил нарисовать свои тайлсеты. Для удобоваримости я их сделал похожими на тайлсеты Blizzard из WarCraft III. Итак, вот они:

Стоит задача - использовать тайлсеты, т.е. накладывать на геометрию так же или почти так же как это делает редактор миров Warcraft III. Итак, вначале у нас есть геометрия, залитая чем-то на подобие тайла нулевого слоя:


схема 0

А дальше мы кликаем мышкой и программа должна выставлять соответствующие тайлы из тайлсета в квадратиках. Оригинальный редактор миров использует 4 квадрата, в каждом из них выбирает тайлы из тайлсетов. Тайлсетов может быть несколько. Не думаю, что там явная организация по слоям, но кто знает. Однако сам предполагаю что слоев как таковых все-таки нет, вместо этого анализируются углы квадратов с тайлами. Возможно что даже номер перехода тайла не хранится в карте для обработки. Т.е. каждому квадратику приписан определенный тип тайла и все. В некоторых местах этот тайл сплошной, т.е. без переходов, в других же - с переходами. Переходы, как пока сам думаю, настраиваются исходя из содержания "соседних квадратов".

Предположим, что по клику мышки мы хотим вписать на карту "кружок", составленный из четырех тайлов. Например:


схема 1

Но кружок получается только когда под ним тайлы одного типа и без переходов. Если мы попадем на границу каких-нибудь переходов, то нужно анализировать ситуацию. Анализировать можно по-разному. Соответственно получим разные механизмы тайлинга. Однако результаты должны получиться одинаковые. Можно анализирвать непосредственно то, что содержалось ранее в тех четырех квадратах в которые попал клик мыши. А можно проверять соседние квадраты. Однако соседних квадратов в два раза больше. В то же время анализировать только 4 квадрата будет трудно, т.к. желательно избежать слоевой структуры.

Итак, вот как интерпретируется схема 1 в виде карты чисел:


схема 2

Вписать четыре единицы в кучу нулей не составляет труда. Основная загвоздка в том как подобрать нужный тайл, то бишь, с нужным переходом. Следует помнить, что сходиться в одном квадрате может до четырех текстур. У квадрата четыре стороны, поэтому с каждой может быть свой тайл. Вернемся немного назад к тому как мы накладывали кружок из травы. Да, в оригинальном редакторе тоже появляется кружок, если мы тычем мышкой на пустую землю. Я предлагаю выбрать в качестве приоритетной формы тайлинга сплошные квадраты. То есть при каждом клике мыши на карту квадратов, программа должна стремиться наложить в месте клика 4 сплошных тайла. Однако 4 сплошных тайла будут уместны только в том случае, если их тип совпадает с уже имеющимися на карте тайлами, причем те не должны быть переходными. Иначе, если слепо наложить 4 сплошных тайла, мы получим острый квадрат. А острых углов обычно избегают. Короче говоря, мы только предполагаем что будут наложены четыре сплошных тайла. Но прежде чем их наложить, мы должны провести анализ соседних квадратов, и, если потребуется, сменить сплошые тайлы на переходные.

Разберемся как же получается кружок на схеме 1. Предлагаю рассмотреть более детально процесс на схеме 1:

1. Мышь кликает на еще пустой квадрат a схемы 0. Тем самым выбираются 4 квадрата (a,b,c,d) для обработки.

2. Не глядя в карту типов тайлов мы записываем четыре единицы (схема 2).

3. Начинаем анализировать то что получилось на схеме 2. Мы должны проанализировать 4 угла (отмечены цифрами на схеме 3). Таким образом, переход тайла в квадрате a будет определяться углом 1, в квадрате b - углом 2 , в квадрате c - углом 3 , в квадрате d - углом 4 .


схема 3

Теперь нужно проанализировать эти четыре угла по отдельности, тем самым упрощая задачу.

Рассмотрим первый угол.


схема 3.1

Наша задача - установить нужный тайл в квадрате a . Делаем предположение что в квадрате a будет сплошной тайл. Например такой:

Смотрим на схему 3.1. Там видим, что на накладываемый тайл травы, закодированный единицей, действуют другие соседние тайлы, закодированные нулями. Желтый нуль своим действием трансформирует сплошной тайл в переходный тайл такого вида:

Зеленому нулю нечего внести в имеющуюся картину, а красный нуль трансформирует дальше так:

А потом синий довершает картину, т.к. серый не вносит отличий:

Именно этот получившийся переходный тайл мы и помещаем в квадрат a . Причем не важно в каком порядке мы рассматриваем действия соседних тайлов. Аналогичные рассуждения можно провести и для остальных квадратов b,c,d . В итоге должна получиться картинка как на схеме 1.

Со схемой 1 разобрались успешно. Я рассуждал о "действиях нулей" исключительно ради того, чтобы было лучше понятно. При реализации совсем не нужно писать функции, отождествленные с этими действиями, достаточно собрать только битовую маску тайла. По битовой маске совершенно однозначно выбирается тайл. Битовую маску в данном случае удобно делать 2х2, т.к. нетрудно заметить что четыре бита вместе дадут 16 различных значений, а в заготовленных тайлсетах как раз 16 вариаций переходов.

Также заметим, что "оказывать действия" могут только те соседние тайлы, которые имеют отличный от накладываемых тайлов тип. Еще вы наверно посчитали что в тайлсетах не 16, а 15 вариаций переходов. Это верно, так как полностью нулевая маска не имеет смысла в контексте накладываемой текстуры тайла. Однако она имеет смысл в текстурировании при подборе координат текстур для нескольких переходов в одном квадрате. Этим смыслом можно себя не загружать, а реализовать, как Бог на душу положит.

Техника автоматического выбора нужного тайла из тайловой карты.

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

Задача: мы сгенерировали красивый уровень платформера и хотим иметь возможность автоматически располагать тайлы на нём с учётом соседей, чтобы они выглядели правильно.

Тайлы, учитывающие своих соседей

Тайлы в Super Mario не учитывают своих соседей: каменный блок всегда выглядит одинаково, и как отдельный фрагмент, и как часть стены.

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

Однобитная карта

Представим, что какими-нибудь хитрыми техниками мы создали схему уровня платформера, состоящую только из каменных блоков и «воздуха» между ними. Уровень можно представить как однобитное изображение, в котором состояние каждого пикселя определяется единственным битом (1 — каменный блок, 0 — «воздух»). Вот увеличенный пример части такого уровня с добавленными линиями сетки:

Набор тайлов (тайлсет)

Тайлсет — это набор графических изображений, которые можно использовать для заполнения карты. Тайлсет Mario довольно ограничен, он состоит из нескольких типов блоков и «декораций», но наш набор будет содержать множество изображений для каждого типа тайлов:

Оцениваем соседей

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

Значение для каждой точки находится исследованием её соседей и прибавлением значений для тех из них, в которых есть камень. Например, если у исследуемой точки сосед сверху тоже заполнен камнем, то ей присваивается значение 1. Если заполнены камнем соседи сверху и снизу, то точке присваивается значение 1 + 4, то есть 5.

Можно заметить, что присваиваемые значения направлений такие же, что и значения в позициях в двоичных числах, и это неудивительно: оба типа значений — это способы представления возможных комбинаций четырёх позиций, каждая из которых может быть во «включенном» или «выключенном» состояниях (камень или «воздух»).

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

Сложение тайлов

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

Отлично!

Двигаемся дальше

Часть первая: избавляемся от «воздуха»

Приведённый выше пример хорошо работает для висящих в воздухе платформ, но на самом деле не полностью обрабатывает два типа тайлов.

Представим, что вместо платформера мы работаем над двухмерной стратегией с видом сверху, в которой есть два типа тайлов — трава и вода. В таком случае тайловое изображение будет присутствовать в каждой точке карты, в ней не будет пустых мест, как в платформере. Это значит, что для определения подходящего тайла у каждой точки карты должно быть значение, сгенерированное на основании её соседей.

Мы можем использовать точно такую же систему оценки соседей, как и прежде, но нам потребуется способ, позволяющий при изучении точки определить, что в ней находится — трава или вода. Это реализовать очень просто — достаточно только добавить ещё одно значение самой точке, по тому же шаблону «2 в степени n» из других значений:

Давайте решим, что в случае наличия воды мы будем прибавлять к значению точки, а при наличии травы — не будем. То есть тайл травы, окружённый со всех сторон травой, будет иметь значение 0. Тайл травы с водой сверху и справа, имеет значение 1 + 8 = 9. Тайл воды, окружённый со всех сторон травой, будет иметь значение 16. Тайл воды, окружённый со всех сторон водой, имеет значение 1 + 2 + 4 + 8 + 16 = 31

Часть вторая: добавляем вариативности

Как обеспечить обработку других типов рельефа?

Допустим, в игре с видом сверху есть три типа рельефа: вода, трава и лес. Мы уже обрабатываем границы воды и травы, теперь нам нужно научиться обрабатывать границы воды и леса, а также травы и леса.

Раньше у нас было два варианта тайлов для каждой соседней позиции (трава или вода), поэтому мы использовали двоичную систему исчисления. Теперь варианта уже три, поэтому нам нужно использовать троичную систему. Необходимо изменить систему оценки соседей для соответствия новой системе исчисления:

В двоичной системе использовался шаблон «2 в степени n», в новой же будем применяться шаблон «3 в степени n».

В троичной системе каждое положение имеет три возможных состояния: трава, вода, лес, или 0, 1, 2. Когда в текущей точке находится трава, мы игнорируем значение (умножаем его на 0). Когда в точке находится вода, мы прибавляем заданное значение (умножаем его на 1). В случае леса мы прибавляем удвоенное значение (умножаем его на 2).

То есть в случае тайла леса сверху и справа от которого находится вода, снизу лес, а слева трава: 81 * 3 + 1 * 2 + 3 * 1 + 9 * 3 + 27 * 0 = 275

Как можно заметить, на этом этапе для охвата всех комбинаций карты с тремя типами рельефа нужно уже отрисовать 324 тайловых изображения. При работе вручную это бы заняло очень много времени. Крайне рекомендую изучить хотя бы частично автоматизированные способы создания такого множества комбинаций.

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

16 августа 2017 в 12:31

Битовый способ отображения тайловых карт

  • Разработка игр
  • Перевод

Техника автоматического выбора нужного тайла из тайловой карты.

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

Задача: мы сгенерировали красивый уровень платформера и хотим иметь возможность автоматически располагать тайлы на нём с учётом соседей, чтобы они выглядели правильно.

Тайлы, учитывающие своих соседей

Тайлы в Super Mario не учитывают своих соседей: каменный блок всегда выглядит одинаково, и как отдельный фрагмент, и как часть стены.

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

Однобитная карта

Представим, что какими-нибудь хитрыми техниками мы создали схему уровня платформера, состоящую только из каменных блоков и «воздуха» между ними. Уровень можно представить как однобитное изображение, в котором состояние каждого пикселя определяется единственным битом (1 - каменный блок, 0 - «воздух»). Вот увеличенный пример части такого уровня с добавленными линиями сетки:

Набор тайлов (тайлсет)

Тайлсет - это набор графических изображений, которые можно использовать для заполнения карты. Тайлсет Mario довольно ограничен, он состоит из нескольких типов блоков и «декораций», но наш набор будет содержать множество изображений для каждого типа тайлов:

Оцениваем соседей

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

Значение для каждой точки находится исследованием её соседей и прибавлением значений для тех из них, в которых есть камень. Например, если у исследуемой точки сосед сверху тоже заполнен камнем, то ей присваивается значение 1. Если заполнены камнем соседи сверху и снизу, то точке присваивается значение 1 + 4, то есть 5.

Можно заметить, что присваиваемые значения направлений такие же, что и значения в позициях в двоичных числах, и это неудивительно: оба типа значений - это способы представления возможных комбинаций четырёх позиций, каждая из которых может быть во «включенном» или «выключенном» состояниях (камень или «воздух»).

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

Сложение тайлов

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

Отлично!

Двигаемся дальше

Часть первая: избавляемся от «воздуха»

Приведённый выше пример хорошо работает для висящих в воздухе платформ, но на самом деле не полностью обрабатывает два типа тайлов.

Представим, что вместо платформера мы работаем над двухмерной стратегией с видом сверху, в которой есть два типа тайлов - трава и вода. В таком случае тайловое изображение будет присутствовать в каждой точке карты, в ней не будет пустых мест, как в платформере. Это значит, что для определения подходящего тайла у каждой точки карты должно быть значение, сгенерированное на основании её соседей.

Мы можем использовать точно такую же систему оценки соседей, как и прежде, но нам потребуется способ, позволяющий при изучении точки определить, что в ней находится - трава или вода. Это реализовать очень просто - достаточно только добавить ещё одно значение самой точке, по тому же шаблону «2 в степени n» из других значений:

Давайте решим, что в случае наличия воды мы будем прибавлять к значению точки, а при наличии травы - не будем. То есть тайл травы, окружённый со всех сторон травой, будет иметь значение 0. Тайл травы с водой сверху и справа, имеет значение 1 + 8 = 9. Тайл воды, окружённый со всех сторон травой, будет иметь значение 16. Тайл воды, окружённый со всех сторон водой, имеет значение 1 + 2 + 4 + 8 + 16 = 31

Часть вторая: добавляем вариативности

Как обеспечить обработку других типов рельефа?

Допустим, в игре с видом сверху есть три типа рельефа: вода, трава и лес. Мы уже обрабатываем границы воды и травы, теперь нам нужно научиться обрабатывать границы воды и леса, а также травы и леса.

Раньше у нас было два варианта тайлов для каждой соседней позиции (трава или вода), поэтому мы использовали двоичную систему исчисления. Теперь варианта уже три, поэтому нам нужно использовать троичную систему. Необходимо изменить систему оценки соседей для соответствия новой системе исчисления:

В двоичной системе использовался шаблон «2 в степени n», в новой же будем применяться шаблон «3 в степени n».

В троичной системе каждое положение имеет три возможных состояния: трава, вода, лес, или 0, 1, 2. Когда в текущей точке находится трава, мы игнорируем значение (умножаем его на 0). Когда в точке находится вода, мы прибавляем заданное значение (умножаем его на 1). В случае леса мы прибавляем удвоенное значение (умножаем его на 2).

То есть в случае тайла леса сверху и справа от которого находится вода, снизу лес, а слева трава: 81 * 3 + 1 * 2 + 3 * 1 + 9 * 3 + 27 * 0 = 275

Как можно заметить, на этом этапе для охвата всех комбинаций карты с тремя типами рельефа нужно уже отрисовать 324 тайловых изображения. При работе вручную это бы заняло очень много времени. Крайне рекомендую изучить хотя бы частично автоматизированные способы создания такого множества комбинаций.

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

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

Кроме того, API может использоваться и для отображения на сайте карт и планов, не имеющих привязки к земной поверхности: например, карт игровых миров, фотографий , поэтажных планов сооружений или планов местности .

Для того, чтобы использовать изображение в качестве пользовательского слоя Яндекс.Карт, его необходимо предварительно подготовить. Подготовка изображения включает в себя два этапа:

    Привязка изображения к географическим координатам (совмещение изображения с картой).

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

    Формирование наборов тайлов.

    Привязанное к координатам изображение требуется нарезать на фрагменты (тайлы) размером 256x256 пикселов. Каждый тайл хранится в отдельном файле (JPEG или PNG). Для каждого значения коэффициента масштабирования должен быть сформирован свой набор тайлов.

Приложение "Подготовка слоя тайлов"

Приложение "Подготовка слоя тайлов" позволяет автоматизировать процесс подготовки произвольного изображения для показа на веб-странице с помощью API Яндекс.Карт.

","hasTopCallout":false,"hasBottomCallout":false,"areas":[{"href":"http://download.yandex.ru/maps/tools/tiler/ymaptiler.exe","shape":"rect","alt":"","justMapLink":true,"coords":,"isNumeric":false}]}}">

Приложение позволяет полностью автоматизировать решение следующих задач:

  • нарезка тайлов с привязкой по координатам -- на изображение наносятся точки привязки, устанавливается соответствие пиксельных координат географическим, изображение перепроецируется под привязку и нарезается на тайлы. Полученные тайлы могут использоваться в качестве источника данных для пользовательского слоя карты (см. ).
  • нарезка тайлов без привязки по координатам -- изображение сразу нарезается на тайлы для отображения с помощью API (например, для просмотра фотографий и планов).
  • создание кода HTML-страницы с готовой картой для размещения на сайте.

Ограничение.

Приложение доступно только для операционной системы Microsoft Windows.

Быстрый старт

    Откройте изображение (в меню Файл выберите команду Открыть изображение ).

    Исходное изображение может быть в одном из следующих форматов: , или.

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

    Экспортируйте изображение в требуемый каталог. Необходимые наборы тайлов и HTML-код карты будут сформированы автоматически.

    Загрузите полученные тайлы и HTML-код карты на сайт.

Управление точками привязки

Внимание. Чтобы перейти в режим редактирования геопривязанного изображения, установите флажок Привязка .

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

Начало отсчета пиксельных координат находится в верхнем левом углу изображения, X – номер пикселя по горизонтали, Y – по вертикали.

Географические координаты точек привязки задаются в десятичном формате. Например, для долготы 34°30" десятичное значение составляет 34.5.

Создание точки привязки

Чтобы создать точку привязки на изображении:

    Нажмите кнопку Добавить .

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

Перемещение точки привязки

Точки привязки можно перетаскивать мышью.

Удаление точки привязки

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

Сохранение точек привязки в файл

Экспорт изображения

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

Приложение "Подготовка слоя тайлов" позволяет экспортировать в виде карты как все изображение целиком (по умолчанию), так и выделенную прямоугольную область. Область экспорта отмечается на изображении синей рамкой (изначально включающей в себя все изображение). Чтобы получить возможность изменить границы области, щелкните по рамке кнопкой мыши.

Чтобы экспортировать изображение в виде наборов тайлов и HTML-кода карты:

    В меню Файл выберите команду Экспорт карты . Откроется диалоговое окно, в котором требуется задать параметры экспорта тайлов (см. список параметров ниже).

    Нажмите Готово . Если изображение имеет большие размеры, то его преобразование и формирование тайлов могут занять несколько минут.

Параметры экспорта тайлов

Каталог для сохранения тайлов Папка, в которой будут созданы файлы тайлов и HTML-файл с кодом карты. Маска имен файлов тайлов Задает правила формирования имен тайловых файлов. Вместо символов %z в имя файла подставляется коэффициент масштабирования, для которого предназначен тайл, вместо %x и %y – координаты тайла. Например, если задана маска %z\tile-%x-%y.png , то тайл с координатами (43797;20185) для 16-го масштаба будет сохранен в подпапку 16 под именем tile-43797-20185.png . Формировать HTML-код карты в файле Установите флажок, если кроме тайлов требуется сформировать HTML-код карты в отдельном файле. Масштабные уровни Максимальное значение коэффициента масштабирования и общее количество его возможных значений, для которых требуется сформировать тайлы. Например, если необходимы тайлы для уровней с 0 по 16, выберите в раскрывающемся списке Максимальный масштаб значение 16, а в списке Количество уровней – 17. Для геопривязанных изображений максимальный возможный масштаб определяется автоматически. Если требуется экспортировать привязанное изображение в большем масштабе, то следует увеличить его размер в графическом редакторе. Формат файлов тайлов Тайлы могут быть экспортированы в один из двух форматов: или. Цвет для заполнения пустот Задайте цвет для заполнения пустот, если выбран формат экспорта JPEG. Данный параметр определяет, каким цветом должны быть заполнены прозрачные участки исходного изображения, а также прозрачные области, которые могут образоваться при повороте изображения во время преобразования. Прозрачность Задайте прозрачность, если выбран формат экспорта PNG. Если пользовательский слой будет отображаться поверх одного из стандартных слоев карты (Схема, Спутник или Гибрид), то тайлы следует сделать полупрозрачными. API-ключ Яндекс.Карт Уникальный API-ключ, полученный для сайта, на котором будет размещена карта. Название слоя тайлов Имя пользовательского слоя, которое будет отображаться в элементе управления "Выбор типа карты". Слой-подложка под слоем тайлов Название слоя Яндекс.Карт, поверх которого будет отображаться созданный пользовательский слой. Элементы управления Яндекс.Карт Названия стандартных элементов управления, которые будут доступны на сформированной карте.

Вы можете создать фон состоящий из тайлов. Причины для этого следующие: во многих играх Вы захотите иметь красивые фоны. Например, в лабиринтной игре Вы захотите, чтобы стенки подходили к друг другу, а в платформе Вы захотите, чтобы фон уровня включал изменяющиеся платформы, деревья и т.д. Вы можете сделать всё это в Game Maker , создавая множество различных объектов, а затем из них составлять свои уровни (комнаты). Но для обработки таких фонов потребуется много ресурсов компьютера, и загрузка таких уровней будет происходить медленнее из-за множества разнообразных объектов. Например, чтобы создать красивые стены в игре с лабиринтом Вам понадобится 15 объектов стен различных видов.

Стандартный выход, используемый во многих играх, заключается в том, что стены и другие статические объекты фактически рисуются прямо на фоне. Но, Вы можете спросить, откуда же игра узнаёт, когда объект натыкается на стену, если она (стена) всего лишь нарисована на фоне? А решение лежит таки на поверхности: Вы создаёте всего один объект стены для игры. Он должен иметь соответствующий размер, а выглядеть может как угодно. При создании комнаты поместите этот объект во все места, где имеется стена. А затем мы делаем данный объект невидимым. В результате, во время игры, Вы не будете видеть указанные объекты стен. Вы увидите вместо них красивый фон. Но твёрдые объекты стен (те, что не видны) - всё ещё там, и объект в игре будет реагировать именно на них.

Вы можете использовать эту методику для любого объекта, который имеет неизменную форму и является статичным. (Но Вы не можете использовать её, когда объект должен перемещаться.) Для платформенных игр, Вам, вероятно, понадобится всего один пол и один объект стены, но Вы сможете сделать красивые фоны, на которых будет видно, что Вы как будто идёте по траве, по веткам деревьев и т.д.

Чтобы использовать тайлы в Вашей комнате, Вы сначала должны добавить в свою игру фоновое изображение, которое эти тайлы содержит. Если Вы хотите чтобы используемые тайлы были частично прозрачными, проверьте - что фоновое изображение Вы также сделали прозрачным. Когды Вы добавите фоновый ресурс, укажите - должен ли он использоваться как набор тайлов. Затем укажите размер каждого тайла и должны ли быть разделители между тайлами, как было указано в главе о фонах.

Теперь, после определения комнаты, щёлкните на вложении tiles . Откроется следующее окно (в действительности, мы уже добавили некоторые плитки в данном примере и отключили сетку).

В левом верхнем углу находится текущий набор используемых тайлов. Чтобы выбрать требуемый набор, щёлкните на кнопке находящейся чуть ниже и выберите желаемое фоновое изображение.

Теперь Вы можете добавлять тайлы, выбрав нужную плитку из набора в левом окне, а затем кликнув в соответствующей области комнаты, находящейся справа. Принцип добавления тайлов аналогичен ситуации с добавлением экземпляров объектов. Если Вы отключите опцию Delete underlying (Удалять при наложении) . Вы можете использовать правую кнопку мыши для удаления тайлов. Удерживая клавишу (при добавлении тайлов) Вы можете добавить сразу много тайлов. И удерживая клавишу , Вы можете перемещать тайлы на новое место. Клавиша позволяет указать точную позицию тайла. Имеется также дополнительное меню, которое появляется при удержании клавиши и щелчке правой кнопкой мыши по тайлу. Кнопки в такой инструментальной панели могут: очистить, сдвинуть, отсортировать или блокировать/деблокировать все тайлы. (В действительности, они действуют только в текущем слое, смотрите ниже).

В некоторых случаях Вы могли бы захотеть поместить часть фона в комнату, которая не будет точно соответствовать размеру плитки тайла. Это проделывается следующим образом. Удерживая клавишу , выделите левой кнопкой мыши желаемое изображение. Теперь Вы можете перетащить и установить в комнате удерживаемое изображение, так же как и тайлы. Чтобы выбрать несколько тайлов, удерживайте клавишу . Заметьте, что это работает нормально, если между тайлами нет разделителя. Если Вы хотите выбирать область кратную размерам сетки, то удерживайте . (Заметьте, Вы можете сменить клавишу во время выбора тайла. В некоторых ситуациях это может пригодится.)

Тайлы могут быть установлены в слоях, которые имеют разную глубину. Внизу Вы увидите текущую глубину. Значение по умолчанию - 1000000, что значит, что тайлы будут за экземплярами. Итак, экземпляры объектов обычно отрисовываются перед тайлами. Вы можете использовать кнопку Add (Добавить) , чтобы добавить новые слои тайлов, имеющих другую глубину. Отрицательные глубины могут использоваться для помещения тайлов перед экземплярами объектов. Если Вы устанавливаете для объектов разные глубины, то Вы можете поместить их между разными слоями тайлов. Если Вы нажмёте Delete (Удалить) , то Вы удалите слой вместе со всеми имеющимися тайлами. (Должен всегда быть хотя бы один слой). Если Вы нажимаете Change (Изменить) , Вы можете изменить глубину слоя плитки. Если Вы даёте такую же глубину другому слою, то они будут объединены.

Tiles can be placed in layers at different depths. At the bottom you see the current depth. Default this is 1000000 which is normally behind all instances. So the instances will move in front of the tiles. You can use the Add button to add new tile layers, each with a different depth. Negative depths can be used to put tiles in front of instances. If you also give objects different depths you can put them between different tile layers. If you press Delete you delete a tile layer together with all its tiles. (There must always be at least one layer.) If you press Change you can change the depth of a tile layer. If you give it the same depth as another layer, the layers are merged.

Использование тайлов - очень мощный инструмент, который необходимо задействовать с максимальной отдачей. Он намного быстрее работает, чем использование объектов, а изображения тайлов хранятся только в единичном экземпляре. Таким образом, Вы можете использовать огромные комнаты с тайлами, и расход памяти при этом будет минимальный.



Поделиться: