2025-05-28 18:36:04 +08:00
|
|
|
|
# Tiled地图解析思路
|
2025-05-30 16:23:12 +08:00
|
|
|
|
- 获取tilesets数组并载入图块集的数据
|
|
|
|
|
|
|
2025-05-28 18:36:04 +08:00
|
|
|
|
- 获取layers数组并遍历对象
|
|
|
|
|
|
- 如果 type : imagelayer,载入单一图片
|
|
|
|
|
|
- 关注"parallax","repeat","offset"字段
|
|
|
|
|
|
- 创建包含 ParallaxComponent 的游戏对象
|
2025-05-30 16:23:12 +08:00
|
|
|
|
|
|
|
|
|
|
- 如果 type : tilelayer,载入瓦片层
|
|
|
|
|
|
- 总共有“地图大小”个瓦片,放入容器vector中
|
|
|
|
|
|
- 每个瓦片包含数据:Sprite,Type(例如solid类型)
|
|
|
|
|
|
- 可能引用多个图块集,因此可先*载入并保存每个图块集的数据*(载入函数),其它瓦片层(以及对象层)也能继续引用
|
2025-06-03 16:06:32 +08:00
|
|
|
|
- 通过data数组中的gid查找所需信息(查找函数,能获取自定义属性),填充瓦片vector
|
2025-05-30 16:23:12 +08:00
|
|
|
|
- 创建包含 TileLayerComponent 的游戏对象(持有瓦片vector)
|
|
|
|
|
|
|
2025-05-30 16:58:19 +08:00
|
|
|
|
- 如果 type : objectgroup 载入对象层
|
|
|
|
|
|
- 对象数据在"objects"字段中,每个对象都创建一个游戏对象
|
2025-06-04 15:11:37 +08:00
|
|
|
|
- 关注的要点:gid查找**源图片信息**,layer数据中确认目标位置(TransformComponent)信息
|
|
|
|
|
|
- 源图片信息:如果是"solid"类型,则 为静止障碍物,碰撞盒大小为整个图片大小
|
|
|
|
|
|
- 源图片信息:如果非"solid"类型,则
|
|
|
|
|
|
- 碰撞盒大小、偏移: 获取 "objectgroup" --> 获取 "objects" --> "x","y","width","height"
|
|
|
|
|
|
- 获取其他指定自定义属性(模版函数),进行必要设置/组件添加。(例如tag、gravity)
|
2025-06-07 10:49:23 +08:00
|
|
|
|
- 源图片信息:如果有"animation"字段(自定义),则载入动画信息并创建动画组件
|
|
|
|
|
|
- 必要讯息(自定义):动画名称、每一帧的源矩形、帧持续时间。
|
2025-06-03 16:06:32 +08:00
|
|
|
|
- 如果没有gid,则代表自己绘制的形状(可能是碰撞盒、触发器等,未来按需处理)
|
|
|
|
|
|
|
2025-06-04 15:11:37 +08:00
|
|
|
|
- 自定义属性的获取方法:图块集中 获取 "tiles" --> 获取 "properties"
|
|
|
|
|
|
|
|
|
|
|
|
- **对象层物体特别注意:** 信息分散在两个区块中:
|
|
|
|
|
|
- 地图tmj中: 绘制区域、名字 (及针对当前地图添加的自定义属性)
|
2025-06-11 09:47:27 +08:00
|
|
|
|
- gid对应的图块集tsj中: 源图片信息 (画在任何地图上都会有的属性)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 地图自定义属性约定
|
|
|
|
|
|
- 限瓦片层
|
|
|
|
|
|
- unisolid (bool) : 单向平台
|
|
|
|
|
|
- ladder (bool) : 梯子
|
|
|
|
|
|
- slope (string) : 斜坡图块,格式"x_y"。x表示左边高度,y表示右边高度。范围0~1。(如果是2则表示1/2高度)
|
|
|
|
|
|
|
|
|
|
|
|
- 限对象层
|
|
|
|
|
|
- tag (string) : 对象类型,例如player,enemy,item
|
|
|
|
|
|
- gravity (bool) : 是否使用重力(有此字段则默认添加 PhysicsComponent)
|
|
|
|
|
|
- health (int) : 添加生命组件,生命值为 value
|
|
|
|
|
|
- animation (json_string) : 添加动画组件,json格式为:
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"name1" : {"duration" : int, "row" : int, "frames": array(int)},
|
|
|
|
|
|
"name2" : ...
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
含义为:
|
|
|
|
|
|
```json
|
|
|
|
|
|
{ "动画名" : {"帧持续时间" : ms, "行" : (从0开始数), "帧序列(列)": [0,1,2...]} }
|
|
|
|
|
|
```
|
|
|
|
|
|
要求每个动画序列帧必须在同一行。
|
2025-06-11 21:47:40 +08:00
|
|
|
|
- sound (json_string) : 添加音频组件,json格式为:
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"id1" : "file_path1",
|
|
|
|
|
|
"id2" : ...
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
2025-06-11 09:47:27 +08:00
|
|
|
|
- 图块碰撞编辑器:识别为碰撞盒,限一个图形,只支持矩形和圆形
|
2025-06-16 10:42:56 +08:00
|
|
|
|
- 自定义形状:默认为触发器,两种主要功能
|
|
|
|
|
|
- 1. 进入下一关:tag : next_level,名称(Tiled自带字段)为下一关地图名字,例如 level2
|
|
|
|
|
|
- 2. 游戏胜利:tag: win
|
2025-06-11 09:47:27 +08:00
|
|
|
|
|
|
|
|
|
|
- 两层皆可
|
|
|
|
|
|
- solid (bool) : 静止不可进入的图块/物体
|
|
|
|
|
|
- hazard (bool) : 对玩家造成伤害的瓦片
|