`

coco2d地图显示相关类

 
阅读更多

摘自:知易教程

Cocos2d-iPhone 实现地图显示的有主要 2 组文件:

1) 负责整体地图的显示:CCTMXTiledMap.h, CCTMXTiledMap.m

2) 负责 xml 文件读取和解析:CCTMXXMLParser.h,CCTMXXMLParser.m

 

在实际游戏编程中,我们主要用到以下几个类:

1) CCTMXTiledMap

Layer 类的 init 凼数中通过以下的代码加载地图:(确保 PNG 文件不 tmx 在一起)

// Load level map 
gameWorld = [CCTMXTiledMap tiledMapWithTMXFile:@"Level1.tmx"];
 [self addChild:gameWorld z:0 tag:9];

 TMXTiledMap 是从 CocosNode 直接派生出来的。他的定义比我们预想的要简单:

@interface CCTMXTiledMap : CCNode
{
	CGSize				mapSize_;
	CGSize				tileSize_;
	int					mapOrientation_;
	NSMutableArray		*objectGroups_;
	NSMutableDictionary	*properties_;
	NSMutableDictionary	*tileProperties_;
}

 分析初始化凼数 init 如下:

-(id) initWithTMXFile:(NSString*)tmxFile
{
	NSAssert(tmxFile != nil, @"TMXTiledMap: tmx file should not bi nil");

	if ((self=[super init])) {
		
		[self setContentSize:CGSizeZero];

		CCTMXMapInfo *mapInfo = [CCTMXMapInfo formatWithTMXFile:tmxFile];
		
		NSAssert( [mapInfo.tilesets count] != 0, @"TMXTiledMap: Map not found. Please check the filename.");
		
		mapSize_ = mapInfo.mapSize;
		tileSize_ = mapInfo.tileSize;
		mapOrientation_ = mapInfo.orientation;
		objectGroups_ = [mapInfo.objectGroups retain];
		properties_ = [mapInfo.properties retain];
		tileProperties_ = [mapInfo.tileProperties retain];
				
		int idx=0;

		for( CCTMXLayerInfo *layerInfo in mapInfo.layers ) {
			
			if( layerInfo.visible ) {
				CCNode *child = [self parseLayer:layerInfo map:mapInfo];
				[self addChild:child z:idx tag:idx];
				
				// update content size with the max size
				CGSize childSize = [child contentSize];
				CGSize currentSize = [self contentSize];
				currentSize.width = MAX( currentSize.width, childSize.width );
				currentSize.height = MAX( currentSize.height, childSize.height );
				[self setContentSize:currentSize];
	
				idx++;
			}			
		}		
	}

	return self;
}
 

CCTMXTiledMap 直接由类 CCTMXLayer 来实现地图的每一个层。每一个 CCTMXLayer 的实例都是通过 Cocos2D-iPhone 标准的 AddChild 添加给 CCTMXTiledMap 的。

 

2) CCTMXlayer

CCTMXLayer 类定义如下:

@interface CCTMXLayer : CCSpriteBatchNode
{
	CCTMXTilesetInfo	*tileset_;
	NSString			*layerName_;
	CGSize				layerSize_;
	CGSize				mapTileSize_;
	uint32_t			*tiles_;			// GID are 32 bit
	NSUInteger			layerOrientation_;
	NSMutableArray		*properties_;
	
	unsigned char		opacity_; // TMX Layer supports opacity
	
	NSUInteger			minGID_;
	NSUInteger			maxGID_;
	
	// Only used when vertexZ is used
	NSInteger			vertexZvalue_;
	BOOL				useAutomaticVertexZ_;
	float				alphaFuncValue_;
	
	// used for optimization
	CCSprite		*reusedTile_;
	ccCArray		*atlasIndexArray_;
}
    显然,CCTMXLayer 对于“瓦片”图像块的管理是通过 CCSpriteSheet 来实现的。 因此,地图的每一个“瓦片”图像就是一个 CCSprite 对象。于是,每一个“瓦片”图 像都可以迚行任意的 CCSprite 操作(增加、删除、移劢、放缩、旋转、变色...)。所有 这些操作都是劢态迚行的。这就允许我们在游戏迚行过程中的对地图迚行劢态操作,通过劢态改变地图的状态来反映游戏精灵对环境产生的影响。 

 

 

 

分享到:
评论

相关推荐

    cocos2d-iphone-2.0.tar.gz

    "cocos2d-iphone-2.0.tar.gz" 是一个压缩包,包含了Cocos2d-iPhone 2.0版本的所有源代码和相关资源。 Cocos2d-iPhone 2.0是该框架的一个重要版本,引入了许多新特性和改进,旨在提高性能和开发效率。以下是关于这个...

    cocos2d播放视频方法相关

    本文将详细介绍如何在Cocos2d中实现视频播放,以及相关的步骤和技术要点。 首先,我们需要了解Cocos2d的基础知识。Cocos2d是一个开源的游戏开发框架,基于Python、Objective-C和C++等语言实现,它提供了丰富的2D...

    cocos2d-x嵌入webview

    《cocos2d-x嵌入Webview:游戏与网页交互的深度解析》 在移动游戏开发领域,cocos2d-x作为一个广泛使用的2D游戏引擎,以其高效、跨平台的特性受到众多开发者青睐。然而,游戏往往需要与网页进行交互,以实现动态...

    cocos2d-x游戏源码 三国策略游戏源码

    cocos2d-x提供了Sprite类,用于显示图像并进行简单的动画处理。源码中可能包含了战斗、移动等不同状态下的动画实现,值得深入研究。 3. **物理引擎**:策略游戏中可能涉及到单位的碰撞检测和物理行为模拟。cocos2d-...

    知易cocos2d源代码

    在【压缩包子文件的文件名称列表】中,"Cocos2D"可能包含了Cocos2D的源代码文件、示例项目、文档、库和其他相关资源。通过研究这些文件,你可以逐步理解和掌握Cocos2D的内部工作机制,以及如何利用这些知识来创建...

    Cocos2d-x 三消游戏源码

    在提供的"Classes"目录下,我们可以找到源代码文件,这些文件包含了游戏逻辑、场景切换、精灵定义、动作控制、事件处理等相关类。而"Resources"目录则包含游戏所需的图像、音频、XML配置文件等资源。 通过对这些...

    cocos2d-x 地图编辑器

    本篇将深入探讨cocos2d-x地图编辑器的使用和相关知识点。 一、cocos2d-x地图编辑器概述 cocos2d-x地图编辑器并非内置于引擎本身,而是通常指的是Tiled Map Editor,一个跨平台的开源地图编辑工具,它能导出为cocos...

    cocos2d-master.zip

    在cocos2d-master中,org目录下很可能包含了cocos2d引擎的Java源代码,如游戏场景管理、精灵、动画控制等相关类。 **cocos2d-android核心功能** - **场景和层管理**:cocos2d-android提供了一套灵活的场景(Scene...

    cocos2d二维码 cpp

    在IT行业中,Cocos2d是一个非常流行的2D游戏开发...开发者通过自定义的`QR_Encode`和`QRSprite`类,成功地将二维码编码和渲染集成到Cocos2d的游戏或应用中,既实现了基本的显示功能,也具备了较高的可定制性和灵活性。

    《Cocos2d-x实战 JS卷 Cocos2d-js开发》随书源码下

    《Cocos2d-x实战 JS卷 Cocos2d-js开发》是一本专注于使用JavaScript进行Cocos2d-x游戏开发的专业书籍。随书源码包含了从第13章到第24章的示例代码,由于文件大小超出上传限制,源码被分为两个压缩包。在这些章节中,...

    cocos2d 资料收藏

    这个资料收藏包含了与Cocos2d相关的各种资源,包括源码、工具以及其他学习材料,旨在帮助开发者深入理解和使用这个强大的框架。 1. **源码分析**: - Cocos2d源码是理解其内部工作原理的关键。通过阅读源码,...

    cocos2d-x 案例开发大全 第二章(源码)

    《cocos2d-x案例开发大全》第二章的源码主要涵盖了使用cocos2d-x进行游戏开发的各种实践技巧和示例。cocos2d-x是一个开源的游戏开发框架,基于C++,支持跨平台,包括iOS、Android、Windows等多个操作系统。本章的...

    cocos2d-x 摇杆

    在iOS平台上,main.m通常会包含AppDelegate的实例化和Cocos2d初始化代码,从而确保ccjoystick可以正确地在游戏场景中加载和显示。 【cocos2d_Joystick_Prefix.pch】是预编译头文件,通常包含一些全局的宏定义和导入...

    Cocos2d-x 2.2.x Json解析

    Cocos2d-x 2.2.x Json解析Demo 无需引入jsoncpp库 相关博文地址:http://blog.csdn.net/u012945598/article/details/17398925

    将Cocos2D窗口嵌入到MFC ActiveX插件中

    6. **暴露接口**:为了让其他应用程序能够控制Cocos2D场景,你需要在MFC ActiveX控件中定义一些接口方法,这些方法可以调用Cocos2D的相关API。例如,你可以创建一个方法来改变场景中的精灵位置,或者播放特定的动画...

    cocos2d 塔防游戏

    cocos2d提供了一些路径相关的类,如CCBezierBy、CCCatmullRomTo等,可以创建平滑的路径。结合A*寻路算法,我们可以自动生成合理的敌人行走路线。 七、数据结构与AI设计 为了实现敌人智能行为,我们需要设计简单的AI...

    cocos2d 一款切水果游戏

    本项目是一款基于cocos2d的游戏——"切水果游戏",让我们一起探讨cocos2d在游戏开发中的应用及其相关知识点。 一、cocos2d框架介绍 1. **引擎概述**:cocos2d最初是为Python设计的,后来发展出了多个版本,包括...

    cocos2d-lua 实现富文本

    在 Cocos2d-lua 中,我们可以使用 `cc.Label` 类来创建文本节点。默认情况下,Label 只能显示基本的纯文本,但通过集成特定的富文本库,如 `ccui.TextField` 或 `cc.LabelTTF`,我们可以实现富文本功能。 2. **富...

    Cocos2d-x 2048游戏源码

    Cocos2d-x的`ui`模块提供了丰富的UI组件,如`Text`, `Button`等,可以在`Classes`目录下找到相关的UI布局和事件处理代码。 7. **性能优化**: 在源码中,可能会发现一些性能优化技巧,如缓存重复使用的对象,合理...

    learn_cocos2d_2

    根据给定的文件信息,我们可以总结出一系列与Cocos2d相关的IT知识要点,这些要点主要围绕游戏开发、iOS编程以及使用Cocos2d引擎进行游戏制作的关键概念和技术。 ### Cocos2d游戏开发入门 #### 引言:游戏开发的新...

Global site tag (gtag.js) - Google Analytics