规则瓦片定义 (<TileDef>)

功能说明

规则瓦片定义用于创建一种智能瓦片,它能根据周围相邻瓦片的类型自动改变其自身的纹理、动画、碰撞体和属性。这种机制极大地简化了地图的绘制工作,尤其适用于那些需要平滑过渡或形成复杂图案的自然地形(如水体、草地边缘、道路等)。每个规则瓦片都包含一系列规则 (rules),系统会根据这些规则来决定在特定邻居条件下应该显示哪种外观。

可用参数

参数名类型默认值说明
defName字符串必需。该规则瓦片定义的唯一标识符。
label字符串(空)可选。该瓦片在游戏中显示的名称。
description字符串(空)可选。该瓦片的详细描述。
collider枚举 (字符串)None必需。瓦片的默认碰撞体类型。详见下文**collider 字段**。
texture字符串(空)可选。瓦片的默认纹理路径或名称,当没有规则匹配时使用。
tileCost浮点数0.0可选。当实体进入该瓦片时,其移动速度降低的百分比(0为不减速,1为完全停止)。
rules规则瓦片规则定义数组必需。定义瓦片如何根据邻居生成不同外观。详见下文**rules 字段**。

示例

这是一个定义了水体规则瓦片的例子,它根据周围水瓦片或非水瓦片的存在来选择不同的纹理:

<Define>
    <TileDef>
        <defName>Water</defName>
        <label>水面</label>
        <description>地图上的水体瓦片,构成河流和湖泊的背景。</description>
        <collider>Grid</collider> <!-- 水面具有网格碰撞体 -->
        <texture>tileMap_37</texture> <!-- 默认纹理或中心水纹理 -->
        <tileCost>0.5</tileCost> <!-- 经过水面时,移动速度减慢50% -->
        <rules>
            <!-- 规则1:周围八个方向都是水瓦片时,显示完整的中心水面 -->
            <rule>
                <neighborConditions>
                    <li>This</li><li>This</li><li>This</li>
                    <li>This</li>                 <li>This</li>
                    <li>This</li><li>This</li><li>This</li>
                </neighborConditions>
                <animationTextures>
                    <li>tileMap_37</li>
                </animationTextures>
                <outputCollider>Grid</outputCollider>
            </rule>

            <!-- 规则2:顶部无水瓦片,形成水体顶部边缘 -->
            <rule>
                <neighborConditions>
                    <li>Any</li><li>NotThis</li><li>Any</li>
                    <li>This</li>                 <li>This</li>
                    <li>This</li><li>This</li><li>This</li>
                </neighborConditions>
                <animationTextures>
                    <li>tileMap_19</li>
                </animationTextures>
                <outputCollider>Grid</outputCollider>
            </rule>

            <!-- 规则3:左侧无水瓦片,形成水体左侧边缘 -->
            <rule>
                <neighborConditions>
                    <li>Any</li><li>This</li><li>This</li>
                    <li>NotThis</li>                 <li>This</li>
                    <li>Any</li><li>This</li><li>This</li>
                </neighborConditions>
                <animationTextures>
                    <li>tileMap_36</li>
                </animationTextures>
                <outputCollider>Grid</outputCollider>
            </rule>
             <!-- ... 更多规则,定义了水体不同边缘和角的纹理 -->

             <!-- 规则10:左上无水瓦片,顶中和左中是水瓦片,形成左上角内凹 -->
            <rule>
                <neighborConditions>
                    <li>NotThis</li><li>This</li><li>Any</li>
                    <li>This</li>                 <li>This</li>
                    <li>Any</li><li>This</li><li>This</li>
                </neighborConditions>
                <animationTextures>
                    <li>tileMap_90</li>
                </animationTextures>
                <outputCollider>Grid</outputCollider>
            </rule>

            <!-- 规则20:完全独立的水单元,孤立于所有其他瓦片 -->
            <rule>
                <neighborConditions>
                    <li>Any</li><li>NotThis</li><li>Any</li>
                    <li>NotThis</li>                 <li>NotThis</li>
                    <li>Any</li><li>NotThis</li><li>Any</li>
                </neighborConditions>
                <animationTextures>
                    <li>tileMap_73</li> <!-- 示例:孤立水图标 -->
                </animationTextures>
                <outputCollider>Grid</outputCollider>
            </rule>
        </rules>
    </TileDef>
</Define>

规则瓦片规则定义 (<RuleTileRuleDef>)

功能说明

每个规则瓦片规则定义(通常作为 规则瓦片定义 (<TileDef>) 内部的匿名定义存在)规定了在满足特定邻居条件时,该瓦片应该采用何种外观、动画、碰撞体和变换方式。规则按顺序评估,第一个匹配的规则将被应用。

可用参数

参数名类型默认值说明
defName字符串可选。该规则的唯一标识符(作为匿名定义时可省略)。
label字符串(空)可选。该规则的描述性标签。
description字符串(空)可选。该规则的详细描述。
neighborConditions邻居条件枚举数组[Any,Any,...,Any]必需。定义周围八个方向(中心瓦片周围的3x3网格,去除自身)的瓦片条件。详见下文**neighborConditions 字段**。
neighborConditionExtend邻居条件定义数组可选。用于定义更复杂或非标准位置的邻居条件。详见下文**neighborConditionExtend 字段**。
outputType枚举 (字符串)Single可选。瓦片的输出类型,例如单个精灵、固定动画或随机精灵。
transform枚举 (字符串)Fixed可选。输出精灵的变换方式,例如固定方向或随机旋转。
outputCollider枚举 (字符串)None可选。此规则生效时,瓦片采用的碰撞体类型。会覆盖 TileDef 中的 collider 值。
chance浮点数0.5可选。当多个规则匹配时,此规则被选中的相对概率。
animationTextures字符串列表可选。当 outputTypeAnimation 时,定义动画帧的纹理路径或名称列表。
animationSpeed浮点数1.0可选。动画播放速度。
tileCost浮点数0.0可选。此规则生效时,瓦片的移动成本(减速率0-1)。会覆盖 TileDef 中的 tileCost 值。

复杂参数说明

collider 字段 (瓦片碰撞体类型)
  • 说明:定义瓦片的碰撞体类型。
  • 可选值
    • None: 无碰撞体,实体可以自由穿过。
    • Grid: 网格碰撞体,通常用于阻挡实体移动。
    • Sprite: 使用瓦片纹理的像素数据生成碰撞体,提供更精确的碰撞区域。
  • 示例
    <collider>Grid</collider>
    
rules 字段 (规则瓦片规则定义数组)
  • 说明:这是一个数组,每个 <li> 元素包含一个 规则瓦片规则定义。这些规则会按顺序进行评估,直到找到第一个满足条件的规则并应用其输出。
  • 数组定义方式
    <rules>
        <rule>
            <!-- 规则1的匿名定义 -->
            <neighborConditions>
                <li>Any</li><li>NotThis</li><li>Any</li>
                <li>This</li>                 <li>This</li>
                <li>This</li><li>This</li><li>This</li>
            </neighborConditions>
            <animationTextures>
                <li>tileMap_19</li>
            </animationTextures>
        </rule>
        <rule>
            <!-- 规则2的匿名定义 -->
            <neighborConditions>
                <li>Any</li><li>This</li><li>This</li>
                <li>NotThis</li>                 <li>This</li>
                <li>Any</li><li>This</li><li>This</li>
            </neighborConditions>
            <animationTextures>
                <li>tileMap_36</li>
            </animationTextures>
        </rule>
        <!-- ... 更多规则 -->
    </rules>
    
neighborConditions 字段 (邻居条件数组)
  • 说明:这是一个固定大小为8的数组,按顺时针方向定义了中心瓦片周围八个邻居的条件,从左上角开始。 瓦片位置(数字代表数组索引): [0] [1] [2] [7] [.] [3] (. 是当前瓦片自身) [6] [5] [4]
  • 相邻条件类型 (NeighborConditionType)
    • Any: 任何类型的瓦片都可以。
    • This: 邻居瓦片必须与当前规则瓦片定义的是同类型瓦片。
    • NotThis: 邻居瓦片不能是当前规则瓦片定义的是同类型瓦片。
  • 数组定义方式
    <neighborConditions>
        <li>This</li><li>This</li><li>This</li>     <!-- 左上、上、右上 -->
        <li>This</li>                 <li>This</li>     <!-- 左、右 -->
        <li>This</li><li>This</li><li>This</li>     <!-- 左下、下、右下 -->
    </neighborConditions>
    
    这个例子表示要求所有八个邻居都是当前瓦片类型。
neighborConditionExtend 字段 (扩展邻居条件数组)
  • 说明:这是一个数组,允许定义除了标准8个邻居之外,任意偏移位置的邻居条件。每个 <li> 元素包含一个 邻居条件定义 (<NeighborConditionDef>) 的匿名定义或引用。
  • 数组定义方式
    <neighborConditionExtend>
        <li>
            <position>2,0</position> <!-- 距离中心瓦片右侧2格的瓦片 -->
            <Type>NotThis</Type>
        </li>
        <li>
            <!-- 引用已定义的扩展邻居条件 -->
            <defName>FarNeighborIsGrass</defName>
        </li>
    </neighborConditionExtend>
    
outputCollider 字段 (输出碰撞体) 与 tileCost 字段 (瓦片移动成本)
  • 说明:这些字段允许你在特定规则生效时,动态地改变瓦片的碰撞体类型和移动成本(减速率)。如果规则中定义了这些值,它们将覆盖 TileDef 中对应的默认值。
  • 示例
    <outputCollider>Grid</outputCollider>
    <tileCost>0.8</tileCost> <!-- 当此规则生效时,移动减速80% -->
    
animationTextures 字段 (动画精灵列表)
  • 说明:这是一个字符串列表,指定了动画的每一帧所使用的纹理资源路径或名称。当规则的 outputTypeAnimation 时,这些纹理会按顺序播放,形成动画效果。
  • 列表定义方式
    <animationTextures>
        <li>tileMap_37</li>
        <li>tileMap_38</li>
        <li>tileMap_39</li>
    </animationTextures>
    

邻居条件定义 (<NeighborConditionDef>)

功能说明

邻居条件定义通常作为 规则瓦片规则定义 (<RuleTileRuleDef>)neighborConditionExtend 字段的匿名定义或引用,用于指定除了标准8个方向之外的、任意偏移位置的瓦片需要满足的条件。

可用参数

参数名类型默认值说明
defName字符串可选。该邻居条件的唯一标识符(作为匿名定义时可省略)。
label字符串(空)可选。该邻居条件的描述性标签。
description字符串(空)可选。该邻居条件的详细描述。
position字符串必需。相对于中心瓦片的位置偏移,格式为 "X,Y"(例如:"1,0"表示右侧一格,"-1,1"表示左上角对角线一格)。
Type枚举 (字符串)Any必需。该位置上的瓦片需要满足的条件。详见上文**neighborConditions 字段中的相邻条件类型 (NeighborConditionType)**。

示例

这是一个定义了一个扩展邻居条件的例子:

<!-- 在 RuleTileRuleDef 中的使用 -->
<rule>
    <!-- ...其他规则条件... -->
    <neighborConditionExtend>
        <li>
            <position>2,0</position> <!-- 距离中心瓦片右侧2格的瓦片 -->
            <Type>NotThis</Type>     <!-- 要求右侧2格的瓦片不能是当前规则瓦片类型 -->
        </li>
        <li>
            <position>0,-3</position> <!-- 距离中心瓦片下方3格的瓦片 -->
            <Type>This</Type>        <!-- 要求下方3格的瓦片必须是当前规则瓦片类型 -->
        </li>
    </neighborConditionExtend>
    <!-- ...其他输出属性... -->
</rule>