Cocos Creator 3.8.x 可对tiled 1.4.x进行的操作或分析有哪些

Cocos Creator 3.8.x 对 Tiled 1.4.x(2D瓦片地图编辑器)提供了完整的导入、解析、渲染及二次开发支持,覆盖从资源导入到运行时交互的全流程。以下是核心可操作/分析维度的详细梳理:

一、核心资源导入与解析

Cocos Creator 3.8.x 原生支持 Tiled 1.4.x 导出的 .tmx/.tsx 格式文件,可解析 Tiled 的核心数据结构,具体包括:

1. 基础图层解析
Tiled 图层类型 Cocos 支持程度
瓦片图层(Tile Layer) 完全解析,支持正交/斜角(Isometric)/六边形(Hexagonal) 瓦片地图,保留图层顺序、可见性、透明度
对象图层(Object Layer) 解析所有对象类型:矩形、椭圆、多边形、折线、点、文本,保留对象属性(自定义属性、锚点、旋转、缩放)
图像图层(Image Layer) 解析嵌入的图片资源,支持图层偏移、缩放、透明度
组图层(Group Layer) 解析分组结构,保留组的层级、可见性、折叠状态(运行时可通过代码控制组内图层)
2. 瓦片集(Tileset)解析
  • 支持 Tiled 1.4.x 的内嵌瓦片集 (嵌入 .tmx)和外部瓦片集.tsx),自动关联纹理资源;
  • 解析瓦片集的属性:瓦片大小、边距、间距、偏移量(tile offset)、透明色;
  • 支持瓦片动画(Tiled 中定义的帧动画),Cocos 可直接播放或通过代码控制;
  • 解析瓦片的自定义属性(如碰撞标签、行走成本、事件标记等)。
3. 地图元数据解析
  • 地图尺寸、瓦片尺寸、方向(正交/斜角/六边形)、渲染顺序(右下/左上);
  • 自定义属性(Tiled 中给地图/图层/瓦片/对象添加的键值对),可通过代码读取;
  • 背景色、无限地图(infinite map)解析(Cocos 3.8.x 完善了无限瓦片地图的渲染优化)。

二、编辑器内可视化操作

在 Cocos Creator 3.8.x 编辑器中可直接对 Tiled 导入的地图进行可视化编辑/配置:

1. 层级管理器操作
  • 拖拽调整 Tiled 图层/组的顺序,修改图层可见性、透明度;
  • 将对象图层中的对象(如矩形)直接关联到 Cocos 节点,添加组件(如碰撞体、触发器);
  • 给瓦片地图节点添加 TileMap 组件(核心组件),可视化配置地图参数。
2. 属性检查器配置
  • TileMap 组件:修改地图渲染模式(如是否启用批处理、抗锯齿)、瓦片集纹理;
  • 对瓦片图层:调整偏移、缩放、旋转,启用/禁用碰撞检测;
  • 对对象图层中的对象:修改位置、大小、旋转,编辑自定义属性(同步 Tiled 定义的属性)。
3. 场景编辑器交互
  • 预览瓦片地图的渲染效果(包括斜角/六边形地图的透视);
  • 选中对象图层中的对象(如点对象),快速定位到场景中的位置;
  • 结合 Cocos 的场景坐标系,调整地图节点的锚点、位置,适配不同分辨率。

三、运行时代码操作(核心能力)

通过 Cocos Creator 3.8.x 的 TileMap/TileLayer/TiledTile 等 API,可对 Tiled 地图进行动态修改和分析,核心场景包括:

1. 瓦片数据读写
typescript 复制代码
import { _decorator, Component, Node, TileMap, TileLayer } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('TileMapController')
export class TileMapController extends Component {
    @property(TileMap)
    tileMap: TileMap = null!;

    onLoad() {
        // 1. 获取指定图层
        const layer = this.tileMap.getLayer('GroundLayer');
        if (!layer) return;

        // 2. 读取指定坐标的瓦片ID(Tiled中定义的ID)
        const tileId = layer.getTileGIDAt(5, 5);
        console.log('Tile ID at (5,5):', tileId);

        // 3. 修改指定坐标的瓦片
        layer.setTileGIDAt(100, 5, 5); // 100为目标瓦片ID

        // 4. 检查瓦片是否为空
        const isEmpty = layer.isEmptyTileAt(5, 5);
        console.log('Tile is empty:', isEmpty);

        // 5. 获取瓦片的自定义属性(Tiled中给瓦片添加的属性)
        const tileInfo = layer.getTileInfoAt(5, 5);
        if (tileInfo) {
            console.log('Tile properties:', tileInfo.properties); // 如{isObstacle: true, cost: 2}
        }
    }
}
2. 对象图层解析(碰撞/寻路/触发)
typescript 复制代码
// 获取对象图层
const objLayer = this.tileMap.getObjectLayer('CollisionLayer');
// 遍历所有对象
objLayer.objects.forEach(obj => {
    console.log('Object name:', obj.name);
    console.log('Object type:', obj.type); // Tiled中定义的对象类型
    console.log('Object position:', obj.x, obj.y);
    console.log('Object size:', obj.width, obj.height);
    console.log('Object custom props:', obj.properties); // 自定义属性

    // 示例:根据对象属性创建碰撞体
    if (obj.properties.isObstacle) {
        const collider = this.node.addComponent(BoxCollider2D);
        collider.offset = new Vec2(obj.x, obj.y);
        collider.size = new Vec2(obj.width, obj.height);
    }
});
3. 瓦片动画控制

Tiled 1.4.x 中可给瓦片添加帧动画(帧序列、时长),Cocos 3.8.x 可直接播放并控制:

typescript 复制代码
const layer = this.tileMap.getLayer('AnimatedLayer');
// 暂停/恢复指定瓦片动画
layer.pauseTileAnimateAt(3, 3);
// layer.resumeTileAnimateAt(3, 3);
// 暂停/恢复整个图层的动画
// layer.pauseAllAnimate();
// layer.resumeAllAnimate();
4. 地图尺寸与坐标转换
typescript 复制代码
// 获取地图总瓦片数
const mapSize = this.tileMap.getMapSize();
console.log('Map size (tiles):', mapSize.width, mapSize.height);

// 获取单个瓦片像素尺寸
const tileSize = this.tileMap.getTileSize();
console.log('Tile size (px):', tileSize.width, tileSize.height);

// 瓦片坐标 ↔ 世界坐标转换
const worldPos = this.tileMap.getTileCenterWorldPos(5, 5); // 瓦片坐标转世界坐标
const tilePos = this.tileMap.getTileCoordByWorldPos(worldPos); // 世界坐标转瓦片坐标

四、高级分析与扩展

1. 性能分析
  • Cocos Creator 3.8.x 提供性能面板 ,可分析瓦片地图的渲染批次(draw call):
    • 瓦片集合并(atlas)可减少 draw call;
    • 隐藏不可见图层、裁剪超出视口的瓦片(Cocos 自动优化,也可手动控制);
  • 监控瓦片地图的内存占用:纹理(瓦片集)是主要内存消耗,可通过纹理压缩优化。
2. 兼容性分析

Tiled 1.4.x 部分特性在 Cocos 3.8.x 中的兼容情况:

Tiled 1.4.x 特性 Cocos 3.8.x 支持情况
正交地图 完全支持
斜角(Isometric)地图 完全支持
六边形(Hexagonal)地图 支持(渲染/坐标计算)
瓦片旋转/翻转 完全支持(Tiled的水平/垂直翻转、旋转)
无限地图(Infinite Map) 支持(解析+渲染,性能优化较好)
瓦片集模板(Template) 部分支持(需手动解析模板引用)
图层蒙版(Layer Mask) 暂不原生支持(可通过代码模拟)
自定义渲染顺序 支持(通过图层顺序/节点层级控制)
3. 扩展开发
  • 自定义 Tiled 插件:导出额外数据(如寻路网格),Cocos 解析后集成;
  • 瓦片地图编辑器扩展:基于 Cocos 插件系统,开发可视化瓦片编辑工具;
  • 批量处理:编写脚本批量修改 Tiled 导入的地图数据(如替换瓦片、批量添加属性)。

五、最佳实践

  1. 瓦片集优化:将常用瓦片合并到同一图集,减少 draw call;
  2. 分层管理:将静态背景、动态交互、碰撞检测分层,便于代码控制;
  3. 属性复用:在 Tiled 中给瓦片/对象添加标准化属性(如 isObstacle),Cocos 统一解析;
  4. 性能裁剪:对大地图,只渲染视口内的瓦片(Cocos 3.8.x 可通过 setVisibleRect 实现);
  5. 版本兼容:Tiled 1.4.x 导出时选择 XML 格式(.tmx),避免 JSON 格式的兼容性问题。

总结

Cocos Creator 3.8.x 对 Tiled 1.4.x 的支持覆盖资源导入-编辑器可视化-运行时动态控制全流程,可满足 2D 瓦片地图的绝大多数开发需求(如关卡编辑、碰撞检测、动态地图修改、瓦片动画)。核心优势是原生解析 Tiled 数据结构,且提供灵活的 API 进行二次开发,仅少数小众特性(如图层蒙版)需手动模拟实现。

相关推荐
jonjia17 小时前
模块、脚本与声明文件
typescript
jonjia17 小时前
配置 TypeScript
typescript
jonjia17 小时前
TypeScript 工具函数开发
typescript
jonjia17 小时前
注解与断言
typescript
jonjia17 小时前
IDE 超能力
typescript
jonjia17 小时前
对象类型
typescript
jonjia17 小时前
快速搭建 TypeScript 开发环境
typescript
jonjia17 小时前
TypeScript 的奇怪之处
typescript
jonjia18 小时前
类型派生
typescript
jonjia18 小时前
开发流程中的 TypeScript
typescript