大佬教程收集整理的这篇文章主要介绍了Cocos2d-X中使用瓦片地图《二》,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在上一篇博客中介绍了Cocos2d-X中瓦片地图的使用,在这篇博客中将接着上一篇博客介绍瓦片地图在Cocos2d-X中更高级一点的应用,
使用地图编辑器打开上一个创建好的瓦片地图
在地图编辑器上添加一个对象层后的效果
保存好后观察地图的tmx文件发现文件中多出了一段内容
<objectgroup name="OBjeCT1" width="12" height="12"> <object x="113" y="595" width="190" height="95"/> <object x="140" y="735" width="230" height="74"/> <object x="218" y="411" width="176" height="146"/> </objectgroup>
代码解释:
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; i<count; i++) { //通过通过对象数组的下标获取相对应的对象 CCObject* obj = objs->objectATindex(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文件为
<?xml version="1.0" encoding="UTF-8"?> <map version="1.0" orientation="orthogonal" width="15" height="10" tilewidth="32" tileheight="32"> <tileset firstgid="1" name="tmw_desert_spacing" tilewidth="32" tileheight="32" spacing="1" margin="1"> <image source="tmw_desert_spacing.png" width="265" height="199"/> </tileset> <layer name="块层 1" width="15" height="10"> <data encoding="base64" compression="zlib"> eJyTY2Bg0ANiOTRsgMTGJo+uTh6LOgUktj4Oc7iIwNjcpI4mhw3D5HHZS0ivHpp+dTLcrI7FbGLCE12NPhqNHL7IdmgQ8Be6GfjcQgkGAB14ETw= </data> </layer> <objectgroup name="OBjeCT1" width="15" height="10"> <object x="136" y="211" width="48" height="36"/> </objectgroup> </map>
程序代码:
//创建地图 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);
执行结果:
以上是大佬教程为你收集整理的Cocos2d-X中使用瓦片地图《二》全部内容,希望文章能够帮你解决Cocos2d-X中使用瓦片地图《二》所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。