Cocos2d-X中使用瓦片地图《二》

Cocos2d-X中使用瓦片地图《二》,第1张

概述在上一篇博客中介绍了Cocos2d-X中瓦片地图的使用,在这篇博客中将接着上一篇博客介绍瓦片地图在Cocos2d-X中更高级一点的应用, 使用地图编辑器打开上一个创建好的瓦片地图 在地图编辑器上添加一个对象层后的效果 保存好后观察地图的tmx文件发现文件中多出了一段内容 <objectgroup name="OBJECT1" width="12" height="12"> <object 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>@H_404_37@ 


代码解释:
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());    }@H_404_37@ 

执行结果:


通过比较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>@H_404_37@ 


然后在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);@H_404_37@  

执行结果:


 总结

以上是内存溢出为你收集整理的Cocos2d-X中使用瓦片地图《二》全部内容,希望文章能够帮你解决Cocos2d-X中使用瓦片地图《二》所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1010757.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存