Я использовал Плиточный построить файлы JSON TILMAPAP для фазовращатель игры в прошлом. Теперь я хотел бы построить свой Файлы карт JSON на лету с PHP.
Вот пример объекта:
{
"height": 50,
"layers": [{
"data": [5884, 5885, 5886, 5887, 5888, 5885],
"height": 50,
"name": "background",
"opacity": 1,
"type": "tilelayer",
"visible": true,
"width": 50,
"x": 0,
"y": 0
}],
"orientation": "orthogonal",
"properties": {},
"tileheight": 16,
"tilesets": [{
"firstgid": 1,
"image": "tiles.png",
"imageheight": 1684,
"imagewidth": 2738,
"margin": 1,
"name": "tiles",
"properties": {},
"spacing": 1,
"tileheight": 16,
"tilewidth": 16
}],
"tilewidth": 16,
"version": 1,
"width": 50
}
Свойства довольно очевидны и задокументированы Github, который ссылается на TMX Карта формата документов на веб-сайте Tiled, но ни объясните, как идентификаторы плиток для слоя data
свойство генерируется.
Два вопроса:
1) Как генерируются идентификаторы плиток для массива данных? Например, если у меня есть лист плитки 5х5, будут ли они размером от 1 до 25 слева направо, сверху вниз?
2) Массив данных использует глобальные идентификаторы, которые являются уникальными для всех листов листов. Как они генерируются? Например, если у меня есть 3 листа 5х5 листов, они будут 1-75? Но в каком порядке?
Основываясь на тестировании, я собираюсь ответить на ваши вопросы в обратном порядке, основываясь на поведении Tiled 0.16.1.
Вы также можете сначала добавить отдельные изображения и использовать вывод XML (* .tmx), так как, на мой взгляд, немного проще, чем вывод JSON, увидеть формат данных. Я предоставляю один ниже:
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" renderorder="right-down" width="10" height="10" tilewidth="64" tileheight="64" nextobjectid="1">
<tileset firstgid="1" name="second" tilewidth="64" tileheight="64" tilecount="3" columns="0">
<tile id="0">
<image width="64" height="64" source="../../../OneDrive/Projects/Tiles/forest.png"/>
</tile>
<tile id="1">
<image width="64" height="64" source="../../../OneDrive/Projects/Tiles/forest-dirt-corner-ne.png"/>
</tile>
<tile id="2">
<image width="64" height="64" source="../../../OneDrive/Projects/Tiles/forest-dirt-corner-nw.png"/>
</tile>
</tileset>
<tileset firstgid="4" name="third" tilewidth="64" tileheight="64" tilecount="1" columns="0">
<tile id="0">
<image width="64" height="64" source="../../../OneDrive/Projects/Tiles/grass.png"/>
</tile>
</tileset>
<tileset firstgid="5" name="first" tilewidth="64" tileheight="64" tilecount="2" columns="0">
<tile id="0">
<image width="64" height="64" source="../../../OneDrive/Projects/Tiles/dirt.png"/>
</tile>
<tile id="1">
<image width="64" height="64" source="../../../OneDrive/Projects/Tiles/dirt-forest-corner-ne.png"/>
</tile>
</tileset>
<layer name="Tile Layer 1" width="10" height="10">
<data encoding="csv">
1,2,3,0,0,0,0,0,0,0,
4,0,0,0,0,0,0,0,0,0,
5,6,0,0,0,0,0,0,0,0,
1,2,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,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,0,0,0,0,0
</data>
</layer>
</map>
2. Как генерируются идентификаторы?
Во-первых, важно понимать, что есть один или несколько tileset
элементы, которые имеют firstgid
приписывать. Согласно документации:
firstgid: Первый глобальный идентификатор плитки этого набора плиток (этот глобальный идентификатор отображается на первую плитку в этом наборе плиток).
Дополнительно:
Первый
tileset
всегда имеетfirstgid
значение 1.
Чуть дальше мы получаем объяснение tile
а также id
:
id: локальный идентификатор плитки в его наборе плиток.
Таким образом, в приведенном выше примере вы увидите, что tileset firstgid="1"
имеет в своем составе три tile
элементы, с id
s в диапазоне от 0 до 2. Делая математику, вы видите, что это плитки с уникальными идентификаторами 1, 2 и 3.
Следующий tileset
имеет firstgid
из 4, так как плитки с id
с 1, 2 и 3 уже пришли раньше. Первый tile
внутри имеет id
0, и так как 4 + 0 = 4, мы знаем, что наш 4-й tile
является.
Если наборы плиток перемещаются в интерфейсе Tiled, идентификаторы также обновляются соответствующим образом. Таким образом, первая плитка в первом наборе будет всегда иметь идентификатор 1.
Например, если у меня есть 3 листа 5х5 листов, они будут 1-75? Но в каком порядке?
Так что да, и это будет основано на порядке наборов плиток, к которым были добавлены листы плиток.
1. Как генерируются идентификаторы для data
массив?
Идентификаторы основаны на сгенерированных идентификаторах, которые связаны с вашим вторым вопросом, на который мы ответили выше. «0» означает, что ни одного тайла нет, а «1» будет первым тайлом (вверху слева) в первом наборе тайлов.
Так:
Например, если у меня есть лист плитки 5х5, будут ли они размером от 1 до 25 слева направо, сверху вниз?
Да.
Других решений пока нет …