地图生成器定义 (<MapGeneratorDef>)
功能说明
地图生成器定义用于配置负责生成游戏地图不同元素的逻辑。每个地图生成器都指定了一个具体的工作类 (workClass),该工作类会根据提供的配置值 (value) 来执行地图的某一部分生成任务,例如生成地形、放置建筑、植被等。这些生成器是模块化的,可以组合起来构建复杂的地图布局。
可用参数
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
defName | 字符串 | 无 | 必需。该地图生成器定义的唯一标识符。 |
label | 字符串 | (空) | 可选。该生成器在游戏中显示的名称。 |
description | 字符串 | (空) | 可选。该生成器的详细描述。 |
workClass | 字符串 | 无 | 必需。指定处理地图生成逻辑的后端类名。详见下文**workClass 字段**。 |
value | JSON字符串 | 无 | 必需。包含传递给 workClass 的所有必要参数。详见下文**value 字段 (JSON 格式详解)**。 |
示例
以下展示了几种不同类型的地图生成器定义:
<Define>
<!-- 树木地图生成器 -->
<MapGeneratorDef>
<defName>TreeGenerator</defName>
<label>树木地图生成器</label>
<description>一个简单的树木地图生成器,根据密度填充地图为树木。</description>
<workClass>PlantMapGenerator</workClass>
<value>
{
"tileDefName":"Tree", <!-- 要生成的树木TileDef名称 -->
"mapCellSizeX":50, <!-- 地图的X轴大小 -->
"mapCellSizeY":50, <!-- 地图的Y轴大小 -->
"requiredBaseTileDefName":"Grass", <!-- 必须在什么基础地形上生成 -->
"density":0.2, <!-- 树木的生成密度 -->
"threshold":0, <!-- 生成阈值,用于控制perlin噪声或随机性 -->
"Scale":5 <!-- 用于perlin噪声的缩放因子 -->
}
</value>
</MapGeneratorDef>
<!-- 基地建筑生成器 - 放置特定模式的建筑 -->
<MapGeneratorDef>
<defName>BaseBuildingGenerator</defName>
<label>基地建筑生成器</label>
<description>一个简单的基地建筑生成器,根据预定义模式放置建筑。</description>
<workClass>BuildingMapGenerator</workClass>
<value>
{
"defName":"ConcreteWall", <!-- 默认填充的实体DefName -->
"positionX":9, <!-- 建筑模式的起始X坐标 -->
"positionY":20, <!-- 建筑模式的起始Y坐标 -->
"mapping": <!-- 数字与DefName的映射关系 -->
{
"1":"ConcreteWall",
"2":"SkillTreeShop",
"3":"StartPoint"
},
"pattern": [ <!-- 建筑布局模式,0代表不放置,1-9代表按mapping放置 -->
[2,0,0,0,0,0,0,0,0,0,0,0,0,3],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1]
]
}
</value>
</MapGeneratorDef>
<!-- 基地地板填充生成器 -->
<MapGeneratorDef>
<defName>BaseFloorFiller</defName>
<label>基地地板填充</label>
<description>一个简单的基地地板填充生成器,填充指定区域为基地地板。</description>
<workClass>BasicTerrainMapGenerator</workClass>
<value>
{
"tileDefName":"BaseFloor", <!-- 要填充的TileDef名称 -->
"mapCellSizeX":30, <!-- 填充区域的X轴大小 -->
"mapCellSizeY":30, <!-- 填充区域的Y轴大小 -->
"threshold":-1, <!-- 生成阈值,-1常用于完全填充 -->
"Scale":2, <!-- 缩放因子 -->
"offsetX":0, <!-- 填充区域的X轴偏移 -->
"offsetY":0 <!-- 填充区域的Y轴偏移 -->
}
</value>
</MapGeneratorDef>
<!-- 基地顶部墙面绘制生成器 -->
<MapGeneratorDef>
<defName>BaseUpWallFiller</defName>
<label>基地顶部墙面绘制</label>
<description>在地图顶部绘制一层基地墙面。</description>
<workClass>BasicTerrainMapGenerator</workClass>
<value>
{
"tileDefName":"BaseWall", <!-- 要填充的TileDef名称 -->
"mapCellSizeX":30, <!-- 墙面区域的X轴大小 -->
"mapCellSizeY":1, <!-- 墙面区域的Y轴大小 -->
"threshold":-1, <!-- 生成阈值 -->
"Scale":2, <!-- 缩放因子 -->
"originX":0, <!-- 墙面起始X坐标 -->
"originY":30 <!-- 墙面起始Y坐标 -->
}
</value>
</MapGeneratorDef>
</Define>
复杂参数说明
workClass 字段 (工作类)
- 说明:指定负责实际地图生成逻辑的后端类名。此字符串必须精确匹配到游戏中对应的地图生成器类。不同的
workClass会需要不同结构的value参数。 - 示例:
<workClass>PlantMapGenerator</workClass> <workClass>BuildingMapGenerator</workClass> <workClass>BasicTerrainMapGenerator</workClass> - 注意:
workClass定义的详细讲解将在 第三章:核心工作类定义 中提供。
value 字段 (JSON 格式详解)
-
说明:这是一个 JSON 格式的字符串,包含了传递给
workClass指定的地图生成器类的所有必要参数。value的内部结构和字段名必须与workClass所期望的参数类型严格匹配。 -
JSON 格式的特点:
- 键值对:由键(字符串)和值组成,键和值之间用冒号
:分隔。 - 对象:用大括号
{}包裹,包含零个或多个键值对,键值对之间用逗号,分隔。 - 数组:用方括号
[]包裹,包含零个或多个值,值之间用逗号,分隔。 - 数据类型:支持字符串、数字、布尔值 (
true/false)、JSON 对象、JSON 数组和null。
- 键值对:由键(字符串)和值组成,键和值之间用冒号
-
编写规则:
- 整个 JSON 结构必须是合法的。
- 所有键(字段名)必须用双引号
""包裹。 - 所有字符串值也必须用双引号
""包裹。数字、布尔值不需要。 - JSON 内部可以包含换行符和缩进,以提高可读性,这些空白字符在解析时会被忽略。
-
不同
workClass对应的value结构示例:-
PlantMapGenerator的value(如TreeGenerator示例所示):{ "tileDefName":"Tree", "mapCellSizeX":50, "mapCellSizeY":50, "requiredBaseTileDefName":"Grass", "density":0.2, "threshold":0, "Scale":5 }这些参数通常用于控制植被的类型、生成范围、密度以及基于Perlin噪声的分布。
-
BuildingMapGenerator的value(如BaseBuildingGenerator示例所示):{ "defName":"ConcreteWall", "positionX":9, "positionY":20, "mapping": { "1":"ConcreteWall", "2":"SkillTreeShop", "3":"StartPoint" }, "pattern": [ [2,0,0,0,0,0,0,0,0,0,0,0,0,3], ] }这些参数通常用于定义一个二维的建筑放置模式,通过
mapping将模式中的数字映射到具体的实体定义。 -
BasicTerrainMapGenerator的value(如BaseFloorFiller示例所示):{ "tileDefName":"BaseFloor", "mapCellSizeX":30, "mapCellSizeY":30, "threshold":-1, "Scale":2, "offsetX":0, "offsetY":0 }这些参数通常用于在指定区域填充单一类型的地形或方块,通过
mapCellSizeX,mapCellSizeY,offsetX,offsetY来定义区域范围。
-
-
注意事项:
value中的 JSON 结构必须与workClass内部定义的参数类结构完全匹配,包括字段名的大小写和数据类型。任何不匹配都可能导致地图生成器无法正确执行。- 为了配置文件的可读性和易维护性,强烈建议使用多行和缩进来格式化
value的内容。