首页 > 代码库 > XTU1201:模和除

XTU1201:模和除

Tiled地图编辑器支持普通视角地图和45度角地图, 它生成的地图数据文件cocos2d-x完美的支持,Tiled地图编辑器是一个以普通使用为目标地图编辑器,它使用简单并且可以轻松地在不同的游戏引擎中使用,其特性有:

1、使用基于XML编码形的地图数据文件使用可以在不同游戏引擎中通用

2、支持普通、45度两种视角

3、对象的放置位置可以精确到像素

4、支持图素、层次和对象等通用概念

5、自动重新载入图素集

6、可以重置图素的大不和偏移

7、支持图章刷和填充等高效工具

8、支持以通用的格式输入输出来打开和存储文件

 

开始Tiled地图编辑器编辑地图

一、首先准备地图素材文件放至工程Resources下,下载安装tiled-0.9.1-win32-setup.exe

地址:http://www.mapeditor.org/

 

二、启动Tiled,选择“文件-》新地图”,来新建地图工程,弹出如下对话框设置地图的大小和图块大小和地图视角方向



三、选择“地图-》新图块”导入图素文件,弹出如下对话框设置图块的大小、边距、偏移量及图块名称、源路径



四、图块创建成功,右侧显示图层名称及图块窗口中的图块,将图层名修改一下,点击工具栏上图章刷,点击一图块开始画地图



五、在图层窗口添加对象层并重命名,并在对象层添加对象,选中新建的对象层,点击工具栏上“插入矩形”在地图上画一个矩形,大小无关紧要,我们主要用来在地图

获取该x,y坐标,以在此放至精灵,右键刚刚添加矩形,选择对象属性,给它命个名称,然后点击确定。





六、点击保存地图命名*.tmx至Resources


七、编写程序代码:

CCTMXTiledMap瓦片地图集类是cocos2d-x中支持Tiled地图编码数据文件形式的类,用于解析地图集的数据文件。开始使用地图,加入代码:

CCTMXTiledMap *pTMXTiledMap = CCTMXTiledMap::create("map.tmx");	pTMXTiledMap->setScale(0.8f);	pTMXTiledMap->setAnchorPoint( ccp(0.5f, 0.5f) );	pTMXTiledMap->setPosition(ccp(visibleSize.width/2 , visibleSize.height/2-300));	this->addChild(pTMXTiledMap);


运行结果:

 

 

八、Cocos2d-x 操作Tiled地图常用方法

显示Tiled地图

CCTMXTiledMap *map = CCTMXTiledMap::create("map3.tmx");	map->setAnchorPoint( ccp(0.5f, 0.5f) );	map->setPosition(ccp(visibleSize.width/2, visibleSize.height/2));	this->addChild(map);


获取地图像素大小, width等于地图宽度块数*每块宽度,height 等于地图高度块数*每块高度

	CCSize CC_UNUSED s = map->getContentSize();	CCLOG("ContentSize: %f, %f", s.width,s.height);


获取地图层

	CCTMXLayer *layer = map->layerNamed("layer1");//参数:地图层名称	CCSize m = layer->getLayerSize();//地图大小	CCLOG("LayerSize: %f, %f", m.width,m.height);


获取对象层

CCTMXObjectGroup *object = map->objectGroupNamed("object1");//参数:对象层名称


获取对象

CCDictionary *sprite_object = object->objectNamed("sprite1");//参数:对象名称


获取对象坐标

	float x = ((CCString*)sprite_object->objectForKey("x"))->floatValue();	float y = ((CCString*)sprite_object->objectForKey("y"))->floatValue();


在坐标处加入精灵

	CCSprite *sprite = CCSprite::create("sprite.png");	sprite->setScale(0.5f);	sprite->setAnchorPoint(ccp(0.0f, 0.0f));	sprite->setPosition(ccp(x, y));	this->addChild(sprite);


当有多个地图层时,遍历地图层

	CCArray* pChildrenArray = map->getChildren();	CCSpriteBatchNode* child = NULL;	CCObject* pObject = NULL;	CCARRAY_FOREACH(pChildrenArray, pObject)	{		child = (CCSpriteBatchNode*)pObject;		if(!child)			break;		child->getTexture()->setAntiAliasTexParameters();	}


当有对象层有多个对象时,遍历所有对象

	CCArray *obs = object->getObjects();	CCDictionary *dict=NULL;	CCObject *ob = NULL;	CCARRAY_FOREACH(obs, ob)	{		dict = (CCDictionary *)ob;		if (!dict)			break;				int y = ((CCString*)dict->objectForKey("y"))->floatValue();		int x = ((CCString*)dict->objectForKey("x"))->floatValue();		int w = ((CCString*)dict->objectForKey("width"))->floatValue();		int h = ((CCString*)dict->objectForKey("height"))->floatValue();		CCLOG("sprite x: %d, y: %d, w: %d, h: %d", x, y, w, h);	}


最后结果图: