【问题标题】:Why property ID's not match to correct tile ID's?为什么属性 ID 与正确的图块 ID 不匹配?
【发布时间】:2014-10-14 09:27:27
【问题描述】:

当我将属性添加到我的图块时,属性会映射到 tileID - 1。我知道 0 表示 <layer data> 上的空白图块。这让我困惑了很长一段时间,直到我注意到它。显而易见的解决方法是在解析文件时将属性增加 1。但是有人知道这是为什么吗?我错过了什么,或者这甚至是正常行为吗?

例子

  • 我给了地砖一个测试属性地板。
  • 我为两堵墙设置了碰撞属性 PassableXXXX。

这是我的 TMX 的一部分:

  <tile id="0">
   <properties>
    <property name="floor" value="floor"/>
   </properties>
  </tile>
  <tile id="1">
   <properties>
    <property name="PassableNorth" value="0"/>
   </properties>
  </tile>
  <tile id="2">
   <properties>
    <property name="PassableEast" value="0"/>
   </properties>
  </tile>
 </tileset>
 <layer name="Floor" width="8" height="8">
  <data encoding="csv">
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1
</data>
 </layer>
 <layer name="Wall" width="8" height="8">
  <data encoding="csv">
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,3,3,5,3,0,0,
0,0,2,0,0,0,0,0,
0,0,4,0,0,0,0,0,
0,0,2,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0
</data>
 </layer>

如您所见,0 属性映射到墙层的空图块。 GID 2 和 3 是我实际的北墙和东墙,但在属性部分被称为 1 和 2。

【问题讨论】:

    标签: xml tmx tiled


    【解决方案1】:

    您的 XML sn-ps 省略了 tileset 元素上的相关属性,即 firstgid="1"

    一张地图可以有多个瓦片集,因此地图上使用的瓦片使用跨越所有这些瓦片集的全局 ID 来引用。相反,tileset 元素内的图块定义使用本地图块 ID。它们之间的偏移量由firstgid 属性定义,它代表“第一个全局ID”,因为它是引用瓦片集中第一个瓦片的全局ID。

    更多详情请访问https://github.com/bjorn/tiled/wiki/TMX-Map-Format#data

    【讨论】:

    • 我仍然不确定这是为什么。在属性上也使用 GID 不是更好吗?现在我必须计算要使用哪个图块集,然后再计算该属性是否属于该图块集。
    • 这是不可能的,因为瓦片集也可以存储在外部并被多个地图使用。对于每个地图,全局 ID 到瓦片集中本地瓦片 ID 的映射可以不同。
    • 没有意识到你的tiled开发者。做得很好,虽然不完全适合我的实施。我还有一个简短的问题:是否已经可以在 LibGDX TmxLoader 中逐块加载?这是因为我需要在等轴测图上按平铺(甚至在内部)对深度进行排序。不过,我已经在编写自己的解析器了 :)
    • 我不熟悉 LibGDX TMX 支持类。听起来你只想自定义渲染而不是解析,如果它是关于绘图顺序的话。
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 2018-05-07
    • 2016-09-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2018-10-21
    相关资源
    最近更新 更多