Tile ID 从哪里来?
Where do the Tile IDs come from in Tiled?
我用 PHP 即时使用了 Tiled to build JSON tilemap files for Phaser games in the past. I would now like to build my JSON map files。
这是一个示例对象:
{
"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
}
这些属性是不言自明的,在 Tiled 网站的 Github, which references the TMX Map format docs 上有记录,但都没有解释图层 data
属性 的图块 ID 是如何生成的。
两个问题:
1) 如何为 "data" 数组生成 Tile ID?例如,如果我有一个 5x5 的图块 sheet,它们是否只是从左到右、从上到下的 1 到 25?
2) 数据数组使用全局 ID,这些 ID 在所有图块 sheet 中都是唯一的。这些是如何产生的?例如,如果我有 3 个 5x5 的图块 sheets,它们会是 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。 id是如何生成的?
首先,重要的是要了解有一个或多个 tileset
元素具有 firstgid
属性。 Per the documentation:
firstgid: The first global tile ID of this tileset (this global ID maps to the first tile in this tileset).
此外:
The first tileset
always has a firstgid
value of 1.
更进一步我们得到tile
和id
的解释:
id: The local tile ID within its tileset.
所以在上面的例子中你会看到 tileset firstgid="1"
里面有三个 tile
元素,id
s 的范围从 0 到 2。做数学你会看到这些是具有唯一 ID 1、2 和 3 的图块。
下一个 tileset
的 firstgid
为 4,因为带有 id
的 1、2 和 3 的方块已经出现了。其中第一个 tile
的 id
为 0,并且由于 4 + 0 = 4,我们知道我们的第 4 个 tile
是什么。
如果 tilesets 在 Tiled 界面中四处移动,id 也会相应地更新。所以第一个 tileset 中的第一个 tile 的 id 总是为 1。
For example, if I have 3 5x5 tile sheets, would they be 1-75? But in what order?
是的,这将基于添加图块表的图块集的顺序。
1. data
数组的 ID 是如何生成的?
ID 基于生成的 ID,这与上面回答的第二个问题有关。 “0”表示没有放置任何图块,而“1”表示第一个图块集中的第一个图块(左上角)。
所以:
For example, If I have a 5x5 tile sheet, would they just be 1 thru 25 left to right, top to bottom?
是的。
我用 PHP 即时使用了 Tiled to build JSON tilemap files for Phaser games in the past. I would now like to build my JSON map files。
这是一个示例对象:
{
"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
}
这些属性是不言自明的,在 Tiled 网站的 Github, which references the TMX Map format docs 上有记录,但都没有解释图层 data
属性 的图块 ID 是如何生成的。
两个问题:
1) 如何为 "data" 数组生成 Tile ID?例如,如果我有一个 5x5 的图块 sheet,它们是否只是从左到右、从上到下的 1 到 25?
2) 数据数组使用全局 ID,这些 ID 在所有图块 sheet 中都是唯一的。这些是如何产生的?例如,如果我有 3 个 5x5 的图块 sheets,它们会是 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。 id是如何生成的?
首先,重要的是要了解有一个或多个 tileset
元素具有 firstgid
属性。 Per the documentation:
firstgid: The first global tile ID of this tileset (this global ID maps to the first tile in this tileset).
此外:
The first
tileset
always has afirstgid
value of 1.
更进一步我们得到tile
和id
的解释:
id: The local tile ID within its tileset.
所以在上面的例子中你会看到 tileset firstgid="1"
里面有三个 tile
元素,id
s 的范围从 0 到 2。做数学你会看到这些是具有唯一 ID 1、2 和 3 的图块。
下一个 tileset
的 firstgid
为 4,因为带有 id
的 1、2 和 3 的方块已经出现了。其中第一个 tile
的 id
为 0,并且由于 4 + 0 = 4,我们知道我们的第 4 个 tile
是什么。
如果 tilesets 在 Tiled 界面中四处移动,id 也会相应地更新。所以第一个 tileset 中的第一个 tile 的 id 总是为 1。
For example, if I have 3 5x5 tile sheets, would they be 1-75? But in what order?
是的,这将基于添加图块表的图块集的顺序。
1. data
数组的 ID 是如何生成的?
ID 基于生成的 ID,这与上面回答的第二个问题有关。 “0”表示没有放置任何图块,而“1”表示第一个图块集中的第一个图块(左上角)。
所以:
For example, If I have a 5x5 tile sheet, would they just be 1 thru 25 left to right, top to bottom?
是的。