瓦片地图_地图瓦片版权-程序员宅基地

技术标签: Cocos2d-x  瓦片地图  遍历  游戏  游戏开发  


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

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

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());
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IT_DS/article/details/43603077

智能推荐

STM32Cube的PWM控制应用篇(二)用两个个定时器生成三个相位差120度的等效正弦波_pwm相位相差120-程序员宅基地

文章浏览阅读5.7k次,点赞12次,收藏46次。STM32Cube的PWM控制应用篇(二)用两个个定时器生成三个相位差120度的等效正弦波三个正弦波相位一个相差120°,三个PWM波形为500Hz,但是我们需要实现的等效正弦波为50Hz,所以可以确定为10个PWM周期为一个正弦波周期,所以我们改变占空比的频率也为50Hz,每次升高36°,10次为一个正弦波周期。_pwm相位相差120

C语言如何寻找丢失的数,【算法】寻找丢失的数字-程序员宅基地

文章浏览阅读1.4k次。题目描述:有一组数字,从1到n中减少了一个数,顺序也被打乱了,放在一个n-1的数组里,请找出丢失的数字。其他类似的题目:已知整型数组A[99],包含的所有99个元素都是从1-100中随机取值,并且这99个数两两互不相等,也就是说从1-100这100个数字中有99个在数组内,有一个缺失。请设计一个算法将缺失的数字找出来。解法1:用1+2+....n(即n(n+1)/2)减去当前输入数据的总和。代码如..._寻找缺失数据c语言

【Windows】快捷键操作指南-程序员宅基地

文章浏览阅读581次。作为靠手吃饭的程序员,想过有一天只能单手操作命令,该如何谋生吗?假设有这么一天,你就必须抛弃鼠标,单手操作。作者收集了windows下的部分好用命令,会保持更新。【Windows命令】常用命令:(三个tab,一大一关)Alt+tab(快速):切换窗口Win+ Tab:松开键盘界面不会消失.Ctrl+Tab :切换到下一个选项卡或浏览器的标签Alt键相关

2018-03-19—SimpleAdapter使用实现Spinner-程序员宅基地

文章浏览阅读157次。这两天事情比较多,所以没有来得及更新博客,对不起大家哈。 今天我们来讲一下Spinner的用法: 很多同学不知道Spinner是什么,没有用过,Spinner是一个下拉菜单,大家都用过QQ吧,QQ在账号输入的地方有一个向下的小三角,点击以后会出现一个下拉菜单,这个作用就跟Spinner...

c51单片机开发-可以测距开锁和远程开锁_51单片机远程开机-程序员宅基地

文章浏览阅读504次。本项目是以STC89C52单片机为基础,利用ESP8266模块和超声波模块实现可以测距开锁和远程控制开锁。_51单片机远程开机

order by 排序原理及性能优化_order by影响性能-程序员宅基地

文章浏览阅读1.5w次,点赞12次,收藏41次。前言排序是我们在写项目中经常用的sql语句的关键字。 往往order by 用不好的话也会对sql性能有一定的影响。我们现在就来介绍一下他的执行过程,并介绍一下优化。正言首先我们来举个例子,假设你要查询城市是”杭州“的所有人的名字,并且按照姓名排序返回前1000个人的姓名、年龄。表定义:这时,你的sql语句可以这么写:这个语句看上去逻辑很清晰,我们还是需要看看他的sql执行过程。..._order by影响性能

随便推点

JSP内置对象、表达式和标签及JSP解析原理-程序员宅基地

文章浏览阅读1k次。JSP的学习路线 什么是JSP?——JSP的背景和发展情况简介 为什么要用JSP?——普通HTML编程中,我们遇到的了哪些问题? JSP的语法特点简介 JSP内置对象 EL表达式 JSP的标签式语法(指令和动作) JSTL标签库 JSP的解析编译执行过程* 什么是JSP?1.Java Server Pages(JSP) is a technology thathelps software develop...

同时启动多个tomcat服务器-程序员宅基地

文章浏览阅读61次。假设现在已经按照正常的方式安装配置好了第一个Tomcat,第二个如何设置呢? 解决办法: 1.解压Tomcat到一个新的目录,比如d:\Tomcat2; 2.新建一个环境变量CATALINA_HOME2,路径为d:\Tomcat2; 3.编辑Tomcat/bin/startup.bat和catalina.bat,把CATALINA_HOME全部替换成CATALINA_HOME2...

STM32F030 使用内部时钟和外部时钟_pll_source_hsi-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏10次。static void SetSysClock(void){ __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/#if defined (PLL_SOURCE_HSI) /..._pll_source_hsi

Android实现三级联动下拉框 下拉列表spinner_android省市县下拉框-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏7次。Android实现(省、市、县)三级联动下拉框 下拉列表spinner主要实现办法:动态加载各级下拉值的适配器在监听本级下拉框,当本级下拉框的选中值改变时,随之修改下级的适配器的绑定值_android省市县下拉框

amd为什么还用针脚_彻底翻盘!AMD 锐龙9 3900X与锐龙7 3700X评测-程序员宅基地

文章浏览阅读291次。前言AMD于一个月多前的台北电脑展上发布了新的Zen2架构锐龙3000系列处理器,代号“Matisse”。虽然之前大家已经收到许多消息,包括7nm工艺的进步,Zen2架构的chiplet多Die设计,IPC的提升等,但是对新处理器性能的表现还是有很大的期待。现在新的锐龙处理器3900X、3700X和X570主板已经来到PCEVA评测室,我们就一起来看看它的效能表现。Zen2架构的设计在实..._3900 pbo2

获得客户机IP,主机名,端口和用户,java获取客户机信息-程序员宅基地

文章浏览阅读1.6k次。request.getHeader("User-Agent"); //就是取得客户端的系统版本 request.getRemoteAddr(); //取得客户端的IP request.getRemoteHost() //取得客户端的主机名 request.getRemotePort(); //取得客户端的端口 request.getRemo..._如何获取发送请求的客户机的ip