JavaScript — откуда берутся идентификаторы плиток в Tiled?

Я использовал Плиточный построить файлы 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? Но в каком порядке?

0

Решение

Основываясь на тестировании, я собираюсь ответить на ваши вопросы в обратном порядке, основываясь на поведении 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 элементы, с ids в диапазоне от 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 слева направо, сверху вниз?

Да.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]