`

Cocos2d-x使用瓦片地图

 
阅读更多

图所示的复杂地图可以使用瓦片地图技术,瓦片地图是用一些小图片(瓦片)拼接而成,这样可以大大地减少内存消耗。如图所示的瓦片地图,只需要如图所示的三个瓦片就可以了。

                                                                                          瓦片地图

 



                                                                                          地图中的瓦片


瓦片地图的分类
瓦片地图可以有三种分类:直角地图、斜角地图和六边形地图。
1、直角地图
直角地图,如图所示是使用方形瓦片构建,看上去是垂直向下观察的鸟瞰图,构成瓦片地图的瓦片不一定是正方形,也可以是长方形瓦片。


2、斜角地图
斜角地图,如图所示是使用菱形瓦片构建。斜角地图是将视角旋转到45度,斜角地图能够使我们的大脑错误地认为,我们是在三维游戏世界中。在早期的电子游戏中由于硬件性能所限制,很多游戏采用斜角地图模拟三维游戏。但是现在运行三维游戏已经不是问题,所有现在我们一般不推荐使用斜角地图。


3、六边形地图
六边形地图,如图所示是使用六边形瓦片构建。


                                                                                        直角地图


                                                                                             斜角地图



                                                                          六边形地图


瓦片地图中核心概念
在瓦片地图中有一些基本的概念需要我们了解一下,这些概念包括:层、瓦片、瓦片地图坐标和全局标识。
1、层
瓦片地图由地图层组成,我们可以对层进行创建、删除、隐藏和显示等操作。
层可以分为:普通层和对象层。普通层用来绘制一些地图基本要素,这些地图要素基本上是固定的,如图所示,云、鸟、树木、仙人掌和草地等。对象层中可以圈出一些区域,一个区域就是一个对象,用来设置一些属性,我们可以获得通过代码获得这些对象属性。地图中对象与场景中精灵关联,如图所示。
如图所示,地图中层是有顺序的,因此前面的层会遮挡后面的层,而且层一旦设置为隐藏,那么就不能在程序中访问。
注意  由于绘图引擎会对每一层的每一个瓦片都进行绘制,在设计层的时候在能满足需求情况下层数越少越好,层数一般不宜超过4层。


                                                                       瓦片地图中的层(TODO然后能表现出分层呢?)


2、瓦片
瓦片(tiles)是构成层最小要素,有些人将tiles翻译为“瓷砖”,我觉得“瓦片”更加贴切,事实上地图中的层就是由这些“瓦片”铺设而成的。地图中所需要的瓦片被设计到一张大的图片中,这种文件叫“瓦片集”,如图所示是David Gervais提供开源免费瓦片集,我们可以到http://pousse.rapiere.free.fr/tome/index.htm网站下载更多的瓦片集。瓦片集中的每一个瓦片,大小是一样,瓦片之间可以有固定的缝隙,在使用的时候地图设计软件会将瓦片集分割成小的瓦片。


                                                                                  David Gervais瓦片集


3、瓦片地图坐标
在瓦片地图中有自己的一套坐标,地图的最小单位是瓦片,一个瓦片占有一个坐标点。不同类型的地图它的坐标是不同的,图11-13所示是直角瓦片地图坐标,坐标原点在左上角。图11-14所示是斜角瓦片地图坐标,坐标原点在菱形地图的顶点。


                                                                                 直角瓦片地图坐标



                                                               斜角瓦片地图坐标(TODO去掉灰色底色)


4、全局标识
瓦片地图中的每一个瓦片都拥有一个唯一的编号全局标识(Global IDentifier,缩写GID),用于在地图中查找某个瓦片。全局标识是从1开始的,如果为0,则说明瓦片为空,我们可以利用全局标识来判断某个坐标下是否存在瓦片。


Cocos2d-x中瓦片地图API
为了访问瓦片地图,Cocos2d-x中访问瓦片地图API,主要的类有:TMXTiledMap、TMXLayer和TMXObjectGroup等。
1、TMXTiledMap
TMXTiledMap是瓦片地图类,它的类图如图所示,TMXTiledMap派生自Node类,具有Node特点。


                                                                                        TMXTiledMap类图
TMXTiledMap常用的函数如下: 
TMXLayer* getLayer(const std::string &layerName)。通过层名获得层对象。
TMXObjectGroup*getObjectGroup(const std::string &groupName)。通过对象层名获得层中对象组集合。
Size& getMapSize()。获得地图的尺寸,它的单位是瓦片。
Size& getTileSize()。获得瓦片尺寸,它的单位是像素。
示例代码如下:
TMXObjectGroup* group = _tileMap->getObjectGroup("Objects");
TMXLayer* background = _tileMap->getLayer("Background");
其中_tileMap是瓦片地图类。


2、TMXLayer
TMXLayer是地图层类,它的类图如图所示,TMXLayer也派生自Node类,也具有Node特点。同时TMXLayer也派生自SpriteBatchNode类,所有TMXLayer对象具有批量渲染的能力,瓦片地图层就是由大量重复的图片构成,它们需要渲染提高性能。


                                                                                            TMXLayer类图
TMXLayer常用的函数如下: 
std::string& getLayerName()。获得层名。
Size& getLayerSize()。获得层尺寸,它的单位是瓦片。
Size& getMapTileSize()。获得瓦片尺寸,它的单位是像素。
Point getPositionAt(const Point& tileCoordinate)。通过瓦片坐标获得像素坐标,瓦片坐标y轴方向与像素坐标y轴方向相反。
int getTileGIDAt(const Point& tileCoordinate)。通过瓦片坐标获得GID值。


3、TMXObjectGroup
TMXObjectGroup是对象层中的对象组集合,它的类图如图11-17所示,注意TMXObjectGroup与TMXLayer不同,TMXObjectGroup不是派生自Node,不具有Node特性。

                                                                                       TMXObjectGroup类图
TMXObjectGroup常用的函数如下:
Value getProperty(const std::string &propertyName)。通过属性名获得属性值。
ValueMap getObject(const std::string &objectName)。通过对象名获得对象信息。
ValueMap getProperties()。获得对象的属性。 
ValueVector getObjects()。获得所有对象。
ValueVector类型的别名是std::vector<Value>,vector是C++的容器类,它能够存放任意类型的动态数组,std是命名空间。
ValueMap类型的别名是std::unordered_map<std::string, Value>,unordered_map也是C++的容器类,它是一种无序的map类型,map是“键-值”对类型。

提示  Value是Cocos2d-x中泛型类,它可以表示unsigned char、int、float、double、bool、std::string、ValueVector、ValueMap和ValueMapIntKey等数据类型。

 

 

更多内容请关注国内第一本Swift图书《Swift开发指南》
本书交流讨论网站:http://www.51work6.com/swift.php
欢迎加入Swift技术讨论群:362298485

 

欢迎关注智捷iOS课堂微信公共平台

分享到:
评论

相关推荐

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    cocos2d-x源码素材

    学习cocos2d-x的代码资源,VS2010运行通过,碰撞检测、瓦片地图、动画等等。

    Cocos2d-x 瓦片地图小游戏 吃西瓜

    Cocos2d-x 瓦片地图小游戏 吃西瓜

    Cocos2d-x实战 C++卷,完整扫描版

    全书内容涵盖了Cocos2d-x的核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、数据交换格式、内存管理、性能优化、平台移植、程序代码管理、三大应用商店发布产品等。本书共29章,按内容结构可分为六篇...

    Cocos2D-X开发学习笔记-瓦片地图的使用示例 .

    Cocos2D-X开发学习笔记-瓦片地图的使用示例 教程地址:http://blog.csdn.net/yangyu20121224/article/details/10053961

    Cocos2d-x3.X游戏开发入门精解 [渥瑞达,冉伟,李连胜 编著] 2015年版

    第10~12 章讲解Cocos2d-x 中的网络、文件、瓦片地图、物理引擎等知识;第13~15 章讲解Cocos2d-x 中的Lua 脚本语言开发、CocosStudio 工具及粒子系统的使用方法;第16~19 章讲解数据统计工具的使用方法、项目跨...

    cocos2d-x 中tiledmap中拖拽

    是cocos2d-x的瓦片地图的拖拽 ,点击功能的实现,帮助你快速学习tiledmap

    Learn iPhone and iPad cocos2d Game Development

     10.4 在cocos2d中使用直角瓦片地图  10.4.1 定位被触摸的瓦片  10.4.2 提高性能和可读性  10.4.3 使用对象层  10.4.4 绘制对象层矩形  10.4.5 滚动瓦片地图  10.5 本章小结 第11章 斜角瓦片地图  11.1 设计...

    tiled-0.10.1-win32-setup

    tiled-0.10.1-win32-setup 可以直接安装在window平台的被Cocos2d-x支持的游戏地图编辑器,使用Tiled编辑出的地图可以很方便的被Cocos2d-x使用 官网:http://www.mapeditor.org/

    Tiled瓦片地图编辑器

    Tiled 地图编辑器是一种用于通用目的的编辑器。特点是比较好用,风格类似mini版的photo...它可以用于制作多种类型的游戏引擎需要(Cocos2D-X引擎中也支持此种方式),而且支持使用插件读写map、增加用于引擎的map格式。

    cocos2dx使用TiledMap创建斜45度地图场景

    博文 cocos2dx使用TiledMap创建斜45度地图场景 资源

    地图编辑器tiled

    一款瓦片集地图编辑器,适用于cocos2d-x游戏开发中的地图制作

    Tiled地图编辑器

    一款瓦片集地图编辑器,导出格式为.tmx,适用于cocos2d-x游戏开发中的地图制作

    Cocos2D 简单游戏

    瓦片地图 精灵匀速移动,聊天系统,场景切换 我自己的作品,和大家分享

    cocos2dx_box2d实例1

    cocos2dx_box2d实例1:瓦片积木,完成box2d渲染调试的基本框架,并完成TestCpp中的tiles示例

    跨平台的地图sunmap.zip

    1.sunmap是基于cocos2d-x上构建的地图框架,采用OpenGL ES的渲染方式 2.sunmap只支持Web墨卡托投影坐标,比如Google,OSM,Bing,ArcGis online以及高德地图 3.到目前为止,sunmap还有很多要做的事情,而且sunmap的...

    iPhone & iPad Cocos2D游戏开发实战

    通过创建4个示例游戏,你将了解cocos2d游戏引擎的核心概念、Objective-C编程语言以及一些相关的工具,如Zwoptex(用于处理材质图册)、Particle Desiger(用于实现粒子效果)、Tiled(用于编辑瓦片地图),等等。...

    Cocos Creator中使用TiledMap教程资源

    我特别喜欢瓦片类的游戏,...网上一搜,我滴天,全是cocos2d的,就让我来填补一下这个空白吧。里面包括了TiledMap编辑器,还有练习资源文件和相关Cocos Creator的工程文件,教程可以参见我的博客blog.csdn.net/potato47

    Our-Red-Alert:这是由szy,bhy,wn,fp开发的红色警戒游戏

    cocos2d-x游戏设计模块 & TMX瓦片地图设计 & 精灵帧plist的制作 Google ProtoBuf & Boost::Asio 网络消息模块 致谢 游戏概述与游戏玩法 简介 Red Alert是一款即时战略(RTS)游戏,支持最多四人对战,可以实现局域网下...

    瓦片类的游戏

    我特别喜欢瓦片类的游戏,...网上一搜,我滴天,全是cocos2d的,就让我来填补一下这个空白吧。里面包括了TiledMap编辑器,还有练习资源文件和相关Cocos Creator的工程文件,教程可以参见我的博客blog.csdn.net/potato47

Global site tag (gtag.js) - Google Analytics