`

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-x 2.2.x Json解析

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

    Cocos2d弹幕射击类手游-涂鸦战机

    直接运行源码中的Xcode工程即可,有可能需要改下Deployment Target和选择合适的模拟器,有报头文件找不到的,可以直接注掉相关. 注意:源码仅供学习和参考使用,切勿用于商业用途,谢谢!!! 测试环境: OSX ...

    Cocos2d-x 3.0 开发(九)使用Physicals代替Box2D和chipmunk

    模拟真实的世界是个比较麻烦的事情 通常这种事情都是交给物理引擎来做 但它们使用的过程中有个令人讨厌的地方 参数太多了 为了初始化一个简单的场景要写很多代码 在cocos2d x 3 0版本中 出现了一个新类族 physicals ...

    cocos2d-xccobject

    ccobject cocos2d-xcocos2d-x最初移植自cocos2d的objective C版本。因此,在内存管理上,使用了和NSObject类似的引用计数器方法,相关接口放置在CCObject类中。

    cocos2d-java:cocos2d java api基本libgdx

    cocos2d-java cocos2d java api基本libgdx 特别说明 作者最近用unity去了,暂时不更新了 环境部署 目录结构调整: src /-引擎代码platform / {platform} / src-引擎与平台相关的代码,各平台对应的Application...

    基于Cocos2d实现大富翁小游戏【100012038】

    角色信息显示栏 与角色等类相关,当状态信息改变时,刷新显示内容 房屋建造、升级功能 特殊房产(银行,医院) 神灵 在地图中储存神灵的位置,在人物类中增加成员变量判断人物是否以及被什么神灵附身。 被附身的人...

    一款基于cocos2d-x开发的一款横版卷轴类游戏

    MapAnalysis 游戏地图解析类 就是专门用来解析地图的,我是用TiledMap做的游戏地图编辑器~~ PhysicsSprite 物理精灵 将Sprite和box2d进行了二次封装 StaticData 静态数据类 废弃了... StaticDataEx ...

    cocos2d-xna 写的一个小游戏demo坦克大战

    最近看到网上介绍cocos2d的资料很多,看了看cocos2d也支持wp7,下载了个 Cocos2d-XNA 安装包,写个小例子玩玩,熟悉下cocos2d 程序很简单,就一个入门级的小游戏,写完后放手机里运行了下效果还可以 开发环境 vs2010,...

    Cocos Creator中使用TiledMap教程资源

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

    OPhone平台2D游戏引擎实现——物理引擎

    碰撞检测通常是游戏开发的难点,作为引擎必然少不了碰撞检测部分,这里我们还是按照cocos2d的构架,使用Box2d作为物理引擎,下面我们将通过在Ophone平台实现一个小游戏,来对Box2d物理引擎进行学习。  Box2d  ...

    iOS开发中使用cocos2d添加触摸事件的方法

    CCLayer类是用来接收触摸输入的。不过你要首先启用这个功能才可以使用它。你通过设置isTouchEnabled为YES来让层接收触摸事件: 代码如下:self.isTouchEnabled = YES; 此项设定最好在init方法中设置。你可以在任何...

    cocos2dx骨骼动画Armature源码剖析(三)

    cocos2dx里骨骼动画代码在cocos -> editor-support -> cocostudio文件夹中,win下通过筛选器,文件结构如下。(mac下没有分,是整个一坨) armature(目录): animation(目录):动画控制相关。 CCProcessBase(文件): ...

    瓦片类的游戏

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

    html5 小游戏 demo

    html5 挺火,写个html5游戏玩玩吧,想起cocos2d 貌似各个平台都有,网上找了找,下载了个Cocos2d-html5引擎包。 貌似另一个开源引擎lufylegend.js也很好,下次用用lufylegend.js试试。 开发环境 chrome Cocos2d-...

    iPad应用开发实战

    然后详细地讲解了内存管理、视图和视图控制器、键盘输入和自定义键盘、绘图、触摸事件与手势识别、动画、多媒体播放、容器类、文件系统、同时性编程与定时器、cocos2d基础、连接设备、加速度传感器、地图与链接...

    网狐荣耀版开发使用常见问题解答

    三、安装cocos,这里我们使用的是cocos2d-x 3.10,3.10版本,Cocos2d-x与cocos整合升级为Cocos引擎,下载后是exe程序,双击直接安装,很简单。 四、下载自动提示补全词典,我还下载了cocos2dx-3.10-api.lua,把下载...

Global site tag (gtag.js) - Google Analytics