`
810364804
  • 浏览: 837725 次
文章分类
社区版块
存档分类
最新评论

【Cocos2d-X开发学习笔记】第25期:游戏背景之瓦片地图集类(CCTMXTiledMap)的使用

 
阅读更多

本系列学习教程使用的是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实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    使用cocos2d-x-2.0-2.0.4开发的简单跨平台益智类魔塔小游戏

    《使用cocos2d-x-2.0-2.0.4开发的简单跨平台益智类魔塔小游戏》 cocos2d-x是一个开源的游戏开发框架,它基于C++,支持多平台,包括iOS、Android、Windows以及Mac OS等。在本项目中,开发者利用cocos2d-x 2.0.4版本...

    Cocos2d-x学习笔记

    Cocos2d-x框架除了Windows平台外,还支持iOS、Android、Mac OS X、Web等平台,初学者在掌握了Windows平台的开发后,可以进一步学习如何使用Cocos2d-x跨平台开发,实现一个游戏在多个平台上运行。 在学习过程中,...

    Cocos2d-x 3.x游戏开发实战pdf含目录

    《Cocos2d-x 3.x游戏开发实战》是一本深度探讨Cocos2d-x 3.x框架的游戏开发书籍,适合对游戏编程有兴趣的开发者学习。Cocos2d-x 是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多平台的...

    Cocos2D-X开发学习笔记-游戏数据存储项目实例(上)

    在“Cocos2D-X开发学习笔记-游戏数据存储项目实例”中,你可能会学习到如何结合上述技术,创建一个实际的游戏数据存储系统。通过阅读教程和分析提供的项目文件"MyDataSave01",你将深入理解如何在实践中应用这些知识...

    Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整

    综上所述,从文件信息中可以提取到的知识点主要涉及Cocos2d-x游戏开发框架、使用JavaScript进行游戏开发、以及电子书的下载、阅读体验和版权问题。另外,还涉及到了电子书资源的获取服务以及对应的联系方式。需要...

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

    本篇学习笔记主要关注的是Cocos2D-X中的瓦片地图(Tile Map)功能的使用,这对于创建复杂的2D游戏场景至关重要。 瓦片地图是游戏开发中常见的地图构造方式,它通过将大地图分解为许多小的、可重复使用的图像块...

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

    《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...

    cocos2d-x学习笔记

    《cocos2d-x学习笔记》 在学习cocos2d-x时,了解其核心组件和工作流程至关重要。AppDelegate是cocos2d-x框架中的一个关键类,它扮演着应用程序入口点的角色,处理应用程序的生命周期事件。让我们深入探讨...

    Cocos2d-x实战:C++卷(2版)源代码

    《Cocos2d-x实战:C++卷(2版)源代码》这本书是关于使用Cocos2d-x游戏引擎进行游戏开发的专业指南。Cocos2d-x是一个开源的、跨平台的游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言...

    cocos2d-x-3.1.zip

    Cocos2d-x是一个开源的游戏开发框架,广泛用于2D游戏、实时渲染应用程序和其他互动内容的制作。这个压缩包“cocos2d-x-3.1.zip”包含了Cocos2d-x框架的3.1版本,这是一个经典且相对旧的版本,可能对于那些寻找历史...

    Cocos2D-X开发学习笔记-动作类之基础动作的使用示例(下)

    Cocos2D-X是一款流行的开源游戏开发框架,尤其在2D游戏领域有着广泛的应用。它提供了丰富的API和功能,使得开发者能够轻松创建出各种复杂的2D游戏。在Cocos2D-X中,动作(Actions)是游戏对象行为的核心组成部分,...

    Cocos2d-x实战 JS卷

    《Cocos2d-x实战 JS卷》是一本深入探讨Cocos2d-x游戏开发的专著,主要聚焦于使用JavaScript语言进行游戏编程。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动设备和桌面平台,支持iOS、Android、Windows等多...

    Cocos2D-X开发学习笔记-触屏事件使用示例

    Cocos2D-X是一款强大的跨平台2D游戏开发框架,被广泛应用于iOS、Android、Windows Phone等多平台的游戏开发。本学习笔记将深入探讨如何在Cocos2D-X中处理触屏事件,让游戏能够响应用户的触摸操作。 首先,我们要...

    Cocos2D-X开发学习笔记-滚动背景地图的使用示例

    这个“Cocos2D-X开发学习笔记-滚动背景地图的使用示例”旨在帮助开发者掌握如何在Cocos2D-X中实现动态的背景滚动效果,这在许多2D游戏中是非常常见的一个功能。 首先,滚动背景地图是通过模拟视窗移动来实现的,...

    Cocos2D-X开发学习笔记-按键事件使用示例

    Cocos2D-X是一款流行的开源游戏开发框架,广泛用于创建2D游戏、应用程序和互动内容。在Cocos2D-X中处理按键事件是游戏交互的重要部分,它允许开发者响应用户的输入,实现游戏逻辑或者界面控制。这篇学习笔记将深入...

    大富翁手机游戏开发实战基于Cocos2d-x3.2引擎

    资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...

    cocos2d-x源码素材

    【cocos2d-x源码素材】是一套用于学习cocos2d-x游戏开发的代码资源,它在Windows平台上使用Visual Studio 2010进行编译并通过了测试。这个资源包涵盖了多个重要的游戏开发技术,包括碰撞检测、瓦片地图(Tile Map)...

    Cocos2D-X开发学习笔记-渲染框架之布景层类的使用示例

    本篇学习笔记主要聚焦于Cocos2D-X的渲染框架,特别是布景层类的使用,这对于构建游戏场景至关重要。 首先,我们要理解Cocos2d-x中的“布景层”(CCLayer)。在Cocos2D-X中,布景层是场景(CCScene)的一个子类,...

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    cocos2d-x 是一个跨平台的游戏开发框架,它基于C++,同时提供了Lua和JavaScript的绑定,让开发者可以方便地在多种操作系统上创建2D游戏、演示程序和其他图形交互应用。这个“cocos2d-x-3.8.zip”压缩包包含的是cocos...

Global site tag (gtag.js) - Google Analytics