加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 19:26:44 所属栏目:百科 来源:网络整理
导读:在上一篇博客中介绍了Cocos2d-X中瓦片地图的使用,在这篇博客中将接着上一篇博客介绍瓦片地图在Cocos2d-X中更高级一点的应用, 使用地图编辑器打开上一个创建好的瓦片地图 在地图编辑器上添加一个对象层后的效果 保存好后观察地图的tmx文件发现文件中多出了

在上一篇博客中介绍了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>


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

执行结果:


??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读