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 进行二次开发,仅少数小众特性(如图层蒙版)需手动模拟实现。

相关推荐
小二·17 小时前
Pinia 完全指南:用 TypeScript 构建可维护、可测试、可持久化的 Vue 3 状态管理
javascript·vue.js·typescript
DevUI团队21 小时前
🔥Angular高效开发秘籍:掌握这些新特性,项目交付速度翻倍
前端·typescript·angular.js
EndingCoder1 天前
TypeScript 的基本类型:数字、字符串和布尔
linux·ubuntu·typescript
游戏技术分享1 天前
【鸿蒙游戏技术分享 第75期】AGC后台批量导入商品失败,提示“参数错误”
游戏·华为·harmonyos
水力魔方1 天前
SWMM深度二次开发专题6:年径流总量控制率及年径流污染总量削减率的计算
经验分享·swmm
浩瀚地学1 天前
【Java】面向对象进阶-接口
java·开发语言·经验分享·笔记·学习
EndingCoder1 天前
数组和元组:处理集合数据
linux·运维·前端·ubuntu·typescript
落幕_1 天前
富文本编辑基础核心
开发语言·javascript·经验分享
中屹指纹浏览器1 天前
2026多账号运营技术方案:指纹浏览器与IP协同适配实操指南
经验分享·笔记
陈言必行1 天前
Unity 之 设备性能分级与游戏画质设置与设备自动适配指南
游戏·unity·游戏引擎