2016-05-08 7 views
0

Я использовал Tiled для создания файлов Tilemap JSON для Phaser игр в прошлом. Теперь я хотел бы построить мой JSON map files на лету с 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 Map format docs на сайте Плиточного, но и не объясняет, как плитка идентификаторов data свойства слоя генерируются.

Два вопроса:

1) Как Плитка Идентификаторы генерируется для массива «данных»? Например, если у меня есть плитка размером 5x5, они будут только от 1 до 25 слева направо, сверху вниз?

2) В массиве данных используются глобальные идентификаторы, которые являются уникальными для всех листов плитки. Как они генерируются? Например, если у меня есть 3 5x5 листов плитки, они будут 1-75? Но в каком порядке?

ответ

2

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

firstgid: Первая глобальная плитка ID этого набора фишек (это глобальная ID карта к первой плитке в этом наборе фишек).

Дополнительно:

Первый tileset всегда имеет firstgid значение 1.

Чуть дальше мы получаем объяснение tile и 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.

Если плитки перемещаются в интерфейсе с черепицей, соответственно, соответственно обновляются идентификаторы. Таким образом, первая плитка в первом наборе тарелок всегда будет иметь идентификатор 1.

Например, если у меня есть 3 листа 5x5 плитки, они будут 1-75? Но в каком порядке?

Так что да, и это было бы основано на порядке наборов плиток, на которые были добавлены плиточные листы.

1. Как генерируются идентификаторы для массива data?

Иды основаны на сгенерированных идентификаторах, которые связывают ваш второй вопрос, ответивший выше. «0» означает, что плитка не установлена, а «1» - первая плитка (верхняя левая) в первом наборе плиток.

Итак:

Например, если у меня есть плитка листа 5х5, они будут просто быть 1 через 25 слева направо, сверху вниз?

Да.

 Смежные вопросы

  • Нет связанных вопросов^_^