本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010
地图编辑器的详细使用请参考文章:《【Cocos2d-X开发学习笔记】游戏开发工具之Tiled地图编辑器的使用》
一、瓦片地图集类CCTMXTiledMap
瓦片地图集类CCTMXTiledMap是Cocos2D-X中支持Tiled地图编码数据文件形式的类,用于解析地图集的数据文
件。CCTMXTiledMap类的继承关系如下图所示。

瓦片地图集类具有如下几个特性。
<1> 每个图素都是一个精灵类。
<2> 每个图素的精灵类在需要时调用tileAt函数被创建。
<3> 每个图素都可以进行旋转缩放等设置。
<4> 在运行时可以添加和删除。
<5> 可以修改z轴顺序来改变遮挡关系。
<6> 每个图素可以设置锚点。
<7> 每个层都可以添加子节点。
<8> 每个图素可以有唯一的标签。
<9> 每个图素可以有唯一的z轴值。
<10> 每个对象组被放在CCArray数组中。
<11> 对象可以拥有自己的属性。
<12> 可以为地图、地图层、对象和对象组加入属性。
当然,使用CCTMXTiledMap类也有一些限制,比如每层只有一个地图集,不过这并不影响我们的使用。
CCTMXTiledMap类的常用函数如下图所示。

二、地图层类CCTMXLayer
地图由地图层组成,地图层是精灵帧批处理类的子类,继承关系如下图所示。除非层次被设置不可见,否则在创
建时层次都会被创建,设置为不可见的层次会在设置为可见时被创建。

地图层类可以设置cc_vertexz属性为整型数字。一旦这个属性被设置,所有图素的z轴深度值都被设置为这个值。
另外,cc_alpha_func属性默认被设置为0,如果希望某一层半透,那么可以设置cc_alpha_func的值,比如可以设置
为0.5。CCTMXLayer类的常用函数见下图所示。


三、地图精灵组类CCTMXObjectGroup
地图精灵组类CCTMXObjectGroup用于代表地图中的精灵组,其继承关系如下图所示。

CCTMXObjectGroup类的常用函数如下图所示。

四、地图项目实例
在Tiled地图编辑器中将地图编辑好后,便可以在程序中使用了。
1、首先新建Cocos2D-X项目,取名为“MyTMXMap”,然后在HelloWorldScene.cpp文件中的init函数中添加如下所示
代码。
bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
//通过编辑文件创建生成地图
CCTMXTiledMap *map = CCTMXTiledMap::create("Maps/orthogonal-test4.tmx");
addChild(map, 0, 1);
//遍历每个图块并设置抗锯齿
CCArray* pChildrenArray = map->getChildren();
CCSpriteBatchNode* child = NULL;
CCObject* pObject = NULL;
CCARRAY_FOREACH(pChildrenArray, pObject)
{
child = (CCSpriteBatchNode*)pObject;
if(!child)
break;
child->getTexture()->setAntiAliasTexParameters();
}
bRet = true;
} while (0);
return bRet;
}
2、实例运行效果图

五、普通视角地图获得对应位置图素项目实例
普通视角地图通过tileAt函数就可以获得相应位置的图素。只要注意传入的参数坐标并非点坐标,而是地图的行列坐
标即可。下面的项目实例就展示了如何获得地图四个角的图素,并将它们进行缩放处理。
1、直接在上面的实例项目中进行简单的代码修改即可,修改代码如下所示。
bool HelloWorld::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(! CCLayer::init());
//通过编辑文件创建生成地图
CCTMXTiledMap *map = CCTMXTiledMap::create("Maps/orthogonal-test4.tmx");
addChild(map, 0, 1);
//遍历每个图块并设置抗锯齿
CCArray* pChildrenArray = map->getChildren();
CCSpriteBatchNode* child = NULL;
CCObject* pObject = NULL;
CCARRAY_FOREACH(pChildrenArray, pObject)
{
child = (CCSpriteBatchNode*)pObject;
if(!child)
break;
child->getTexture()->setAntiAliasTexParameters();
}
CCTMXLayer* layer = map->layerNamed("Layer 0");
CCSize s = layer->getLayerSize();
CCSprite* sprite;
sprite = layer->tileAt(ccp(0,0));
sprite->setScale(2);
sprite = layer->tileAt(ccp(s.width-1,0));
sprite->setScale(2);
sprite = layer->tileAt(ccp(0,s.height-1));
sprite->setScale(2);
sprite = layer->tileAt(ccp(s.width-1,s.height-1));
sprite->setScale(2);
bRet = true;
} while (0);
return bRet;
}
2、实例运行效果图

一般情况下,通过具体位置获得地图的行列数需要一个转换。普通视角地图的转换很简单,如下代码所示。

总体的思路就是具体位置除以图素的宽高,但这里需要注意的,在y轴的处理上略有不同。因为Cocos2D-X中的坐
标系中,y轴是从下到上依次增加的,而地图中的行数则是从上到下增加的,这就需要做一个转换,用总的行数减去y
轴坐标除以图素高,结果才是所在图素的行数。
源码下载地址
分享到:
相关推荐
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
《使用cocos2d-x-2.0-2.0.4开发的简单跨平台益智类魔塔小游戏》 cocos2d-x是一个开源的游戏开发框架,它基于C++,支持多平台,包括iOS、Android、Windows以及Mac OS等。在本项目中,开发者利用cocos2d-x 2.0.4版本...
Cocos2d-x框架除了Windows平台外,还支持iOS、Android、Mac OS X、Web等平台,初学者在掌握了Windows平台的开发后,可以进一步学习如何使用Cocos2d-x跨平台开发,实现一个游戏在多个平台上运行。 在学习过程中,...
《Cocos2d-x 3.x游戏开发实战》是一本深度探讨Cocos2d-x 3.x框架的游戏开发书籍,适合对游戏编程有兴趣的开发者学习。Cocos2d-x 是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多平台的...
在“Cocos2D-X开发学习笔记-游戏数据存储项目实例”中,你可能会学习到如何结合上述技术,创建一个实际的游戏数据存储系统。通过阅读教程和分析提供的项目文件"MyDataSave01",你将深入理解如何在实践中应用这些知识...
综上所述,从文件信息中可以提取到的知识点主要涉及Cocos2d-x游戏开发框架、使用JavaScript进行游戏开发、以及电子书的下载、阅读体验和版权问题。另外,还涉及到了电子书资源的获取服务以及对应的联系方式。需要...
本篇学习笔记主要关注的是Cocos2D-X中的瓦片地图(Tile Map)功能的使用,这对于创建复杂的2D游戏场景至关重要。 瓦片地图是游戏开发中常见的地图构造方式,它通过将大地图分解为许多小的、可重复使用的图像块...
《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...
《cocos2d-x学习笔记》 在学习cocos2d-x时,了解其核心组件和工作流程至关重要。AppDelegate是cocos2d-x框架中的一个关键类,它扮演着应用程序入口点的角色,处理应用程序的生命周期事件。让我们深入探讨...
《Cocos2d-x实战:C++卷(2版)源代码》这本书是关于使用Cocos2d-x游戏引擎进行游戏开发的专业指南。Cocos2d-x是一个开源的、跨平台的游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言...
Cocos2d-x是一个开源的游戏开发框架,广泛用于2D游戏、实时渲染应用程序和其他互动内容的制作。这个压缩包“cocos2d-x-3.1.zip”包含了Cocos2d-x框架的3.1版本,这是一个经典且相对旧的版本,可能对于那些寻找历史...
Cocos2D-X是一款流行的开源游戏开发框架,尤其在2D游戏领域有着广泛的应用。它提供了丰富的API和功能,使得开发者能够轻松创建出各种复杂的2D游戏。在Cocos2D-X中,动作(Actions)是游戏对象行为的核心组成部分,...
《Cocos2d-x实战 JS卷》是一本深入探讨Cocos2d-x游戏开发的专著,主要聚焦于使用JavaScript语言进行游戏编程。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动设备和桌面平台,支持iOS、Android、Windows等多...
Cocos2D-X是一款强大的跨平台2D游戏开发框架,被广泛应用于iOS、Android、Windows Phone等多平台的游戏开发。本学习笔记将深入探讨如何在Cocos2D-X中处理触屏事件,让游戏能够响应用户的触摸操作。 首先,我们要...
这个“Cocos2D-X开发学习笔记-滚动背景地图的使用示例”旨在帮助开发者掌握如何在Cocos2D-X中实现动态的背景滚动效果,这在许多2D游戏中是非常常见的一个功能。 首先,滚动背景地图是通过模拟视窗移动来实现的,...
Cocos2D-X是一款流行的开源游戏开发框架,广泛用于创建2D游戏、应用程序和互动内容。在Cocos2D-X中处理按键事件是游戏交互的重要部分,它允许开发者响应用户的输入,实现游戏逻辑或者界面控制。这篇学习笔记将深入...
资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...
【cocos2d-x源码素材】是一套用于学习cocos2d-x游戏开发的代码资源,它在Windows平台上使用Visual Studio 2010进行编译并通过了测试。这个资源包涵盖了多个重要的游戏开发技术,包括碰撞检测、瓦片地图(Tile Map)...
本篇学习笔记主要聚焦于Cocos2D-X的渲染框架,特别是布景层类的使用,这对于构建游戏场景至关重要。 首先,我们要理解Cocos2d-x中的“布景层”(CCLayer)。在Cocos2D-X中,布景层是场景(CCScene)的一个子类,...
cocos2d-x 是一个跨平台的游戏开发框架,它基于C++,同时提供了Lua和JavaScript的绑定,让开发者可以方便地在多种操作系统上创建2D游戏、演示程序和其他图形交互应用。这个“cocos2d-x-3.8.zip”压缩包包含的是cocos...