瓦片地图

简介:


在游戏开发过程中,我们会遇到超过屏幕大小的地图,例如即时战略游戏,使得玩家可以在地图中滚动游戏画面。这类游戏通常会有丰富的背景元素,如果直接使用背景图切换的方式,需要为每个不同的场景准备一张背景图,而且每个背景图都不小,这样会造成资源浪费。

瓦片地图就是为了解决这问题而产生的。一张大的世界地图或者背景图可以由几种地形来表示,每种地形对应一张小的的图片,我们称这些小的地形图片为瓦片。把这些瓦片拼接在一起,一个完整的地图就组合出来了,这就是瓦片地图的原理。

TileMap方案

在Cocos2d-x中,瓦片地图实现的是TileMap方案,TileMap要求每个瓦片占据地图上一个四边形或六边形的区域。把不同的瓦片拼接在一起,就可以组成完整的地图了。我们需要很多较小的纹理来创建瓦片。通常我们会将这些较小的纹理放在一张图片中,这样做会提高绘图性能。

瓦片地图编辑器

Cocos2d-x支持由瓦片地图编辑器Tiled Map Editor制作并保存为TMX格式的地图。Tiled Map Editor是一个开源项目,支持Windows、Linux及Mac OS X多个操作系统,我们可以从官网下载到编辑器的Java和QT版本。

如何使用Tiled工具建立地图可以参考以下文章:

如何使用Cocos2dx3.0制作基于tilemap的游戏

地图方向

Tiled地图支持直角鸟瞰地图(90°地图)、等距斜视地图(斜45°地图)和六边形地图,不支持左右或上下边界的六边形地图。

地图资源

  • 建议瓦片地图素材大小为32*32的倍数
  • 瓦片素材组与其他图片不能混合使用
  • 只有瓦片素材图能被导入TMX文件
  • 每个Layer最多支持1套瓦片素材组。

瓦片层

  • TMX文件中瓦片层的数量没有上限
  • 每一个瓦片层只能由一种瓦片素材组成
  • 每一个瓦片层可以被TMXLayer类表示-为SpriteSheet的子类
  • 每一个单一的瓦片被Sprite表示-父节点为TMXLayer

对象层

  • 瓦片地图支持对象组
  • 用来添加除背景以外的游戏元素-道具、障碍物等
  • 对象组中的对象在TMX文件中以键值对形式存在,因此可以直接在TMX文件中对他进行修改

瓦片地图坐标系

对于一个16*16的瓦片地图文件的坐标系统为

  • (0, 0): 左上角
  • (15, 15): 右下角

tiledmap

在Cocos2d-x中使用TMX

创建TMX节点

1
2
TMXTiledMap *map = TMXTiledMap::create( "bg.tmx" );
addChild(map, 0);

遍历子节点

1
2
3
4
5
6
7
8
9
10
11
Vector<Node*> pChildrenArray = map->getChildren();
 
SpriteBatchNode* child = NULL;
 
Ref* pObject = NULL;
 
for (Vector<Node*>::iterator it = pChildrenArray.begin(); it != pChildrenArray.end(); it++) {
     pObject = *it;
     child = (SpriteBatchNode*)pObject;
 
}

获取/删除一个瓦片

1
2
3
TMXLayer* layer = map->getLayer( "layer0" );
Sprite* tile0 = layer->getTileAt(Point(1, 15));
layer->removeTileAt(Point(1, 15));

遍历对象层中对象

1
2
3
4
5
6
7
8
TMXObjectGroup* objectGroup = map->getObjectGroup( "center" );
ValueVector object = objectGroup->getObjects();
 
for (ValueVector::iterator it = object.begin(); it != object.end(); it++) {
     Value obj = *it;
     ValueMap map = obj.asValueMap();
     log ( "x = %d y = %d" , map.at( "x" ).asInt(), map.at( "y" ).asInt());
}
目录
相关文章
|
8月前
|
数据安全/隐私保护 Android开发 iOS开发
阿里云企业邮箱收费标准一年多少钱?免费版、标准版、企业尊享和集团版费用价格
阿里云企业邮箱提供免费版(0元)、标准版(540元/年)、尊享版(1260元/年)和集团版(7600元/年)四档,支持5–100个账号及差异化网盘容量。功能逐级增强,VIP服务含专属技术支持。性价比高,适合不同规模企业按需选择。(239字)
2110 138
|
6月前
|
Java 数据库连接 Spring
IDEA 报错 “Command line is too long” 的解决方法
这个错误的本质是 IDEA 生成的启动命令行超出了系统限制。解决方法很简单: 1. 打开运行配置 2. 找到 `Shorten command line`(找不到就点 `Modify options`) 3. 修改为 `JAR manifest` 或 `classpath file` 4. 重新运行
1134 2
IDEA 报错 “Command line is too long” 的解决方法
|
10月前
|
人工智能 前端开发 Java
关于Agent框架,豆包,DeepSeek、Manus都选择了它
2025年被视为Agent元年,通过向Manus、豆包、DeepSeek提问“编程框架第一性原理”,发现三者不约而同推荐阿里巴巴开源的AgentScope。
1471 2
关于Agent框架,豆包,DeepSeek、Manus都选择了它
|
9月前
|
运维 自然语言处理 安全
✅真·喂饭级教程:2026年OpenClaw(Clawdbot)部署+飞书快速接入指南
OpenClaw(原Clawdbot/Moltbot)作为阿里云生态下的开源AI自动化代理工具,凭借自然语言交互、全场景任务自动化、轻量化部署的核心能力,已成为企业数字化办公提效的核心工具。2026年阿里云推出OpenClaw专属一键部署方案,结合飞书(Lark)在企业协作场景的深度覆盖,实现“飞书聊天窗口下达指令,OpenClaw自动执行任务”的高效协作模式。本文将完整拆解阿里云环境下OpenClaw的一键部署流程,重点详解飞书机器人创建、权限配置、对接调试的全步骤,包含实操代码命令与企业级避坑技巧,零基础用户也能快速完成从部署到落地的全流程。
4601 9
|
10月前
|
人工智能 自然语言处理 Cloud Native
云原生时代的 Vibe Coding:2026 AI 开发助手权威效能评测
在云原生架构日益复杂的今天,如何利用 Vibe Coding 提升全栈开发效率?本文通过权威数据横评了 10 款 AI 助手的工程化能力,重点展示了文心快码在处理复杂上下文及自动化任务拆解方面的卓越表现。
|
数据采集 机器学习/深度学习 PyTorch
PyTorch 与计算机视觉:实现端到端的图像识别系统
【8月更文第29天】计算机视觉是人工智能领域的重要分支之一,其应用广泛,从自动驾驶汽车到医学影像分析等。本文将介绍如何使用 PyTorch 构建和训练一个端到端的图像分类器,并涵盖数据预处理、模型训练、评估以及模型部署等多个方面。
681 1
|
机器学习/深度学习 DataWorks 安全
CDP是什么?
CDP是什么?
1394 0
|
人工智能 JSON API
|
开发工具 git
成功解决:fatal: detected dubious ownership in repository at ‘E:/workspace/CSMarket‘。如何使用git工具通过命令行的形式
这篇文章分享了作者在使用Git工具初始化本地仓库时遇到的权限问题,提供了通过命令行解决Git仓库权限问题的方案,并介绍了如何使用Git命令行初始化项目、添加文件、提交以及关联远程仓库的步骤。
成功解决:fatal: detected dubious ownership in repository at ‘E:/workspace/CSMarket‘。如何使用git工具通过命令行的形式

热门文章

最新文章