在上一篇博客中介绍了Cocos2d-X中瓦片地图的使用,在这篇博客中将接着上一篇博客介绍瓦片地图在Cocos2d-X中更高级一点的应用,

使用地图编辑器打开上一个创建好的瓦片地图


在地图编辑器上添加一个对象层后的效果


保存好后观察地图的tmx文件发现文件中多出了一段内容

代码解释:

objectgroup name="OBJECT1" 表示对象层的名字
x="113" 对象层中某个对象的x坐标
y = "589"对象层中某个对象的y坐标
width="12" 对象层的宽度(12表示对象层的宽度为12个图块)
height="12" 对象层的高度(12表示对象层的高度为12个图块)
width="190 " 对象层中某个对象的宽度
height="95" 对象层中某个对象的高度

程序实例1:打印对象层中每个对象的信息

程序代码

//创建地图
CCTMXTiledMap* map = CCTMXTiledMap::create("orthogonal-test1.tmx");
addChild(map);
//通过对象层的名字获取对象
CCTMXObjectGroup* objG = map->objectGroupNamed("OBJECT1");
//获取对象数组
CCArray* objs = objG->getObjects();
//获得对象的个数
int count = objs->count();
for(int i=0; iobjectAtIndex(i);
//将对象转换成字典
CCDictionary* dict = (CCDictionary*)obj;
//获取对象的x坐标
const CCString* x = dict->valueForKey("x");
//获取对象的x坐标
const CCString* y = dict->valueForKey("y");
//获取对象的宽度
const CCString* width = dict->valueForKey("width");
//获取对象的高度
const CCString* height = dict->valueForKey("height");
//打印对象信息
CCLog("x=%d, y=%d, width=%d, height=%d", x->intValue(), y->intValue(), width->intValue(), height->intValue());
}

执行结果:


通过比较tmx文件中的对象的数据和输出的对象的数据发现对象的y坐标和输出的对象的y坐标不相同,是因为瓦片地图使用的坐标原点位左上角,而Cocos2d-X中坐标的原点为左下角,打印出来的是对象在Cocos2d-X中的坐标

程序实例2:在对象层上添加一个精灵

首先使用地图编辑器创建一个瓦片地图


在图层上添加一个对象层,并且在对象层上添加一个对象并保存


添加完成后的tmx文件为

eJyTY2Bg0ANiOTRsgMTGJo+uTh6LOgUktj4Oc7iIwNjcpI4mhw3D5HHZS0ivHpp+dTLcrI7FbGLCE12NPhqNHL7IdmgQ8Be6GfjcQgkGAB14ETw=

然后在Resource文件夹中添加一张图片用于创建精灵


程序代码:

//创建地图
CCTMXTiledMap* map = CCTMXTiledMap::create("map.tmx");
addChild(map);
//通过对象层的名字获取对象层
CCTMXObjectGroup* objG = map->objectGroupNamed("OBJECT1");
//通过对象名获取对象层中的对象
CCDictionary* dir = objG->objectNamed("Hero");
//获取对象的位置
float x = dir->valueForKey("x")->floatValue();
float y = dir->valueForKey("y")->floatValue();
//在对象上创建一个精灵
CCSprite* sprite = CCSprite::create("green_edit.png");
addChild(sprite);
//设置精灵的位置
sprite->setPosition(ccp(x,y));
//设置精灵的描点为左下角
sprite->setAnchorPoint(CCPointZero);

执行结果: