cocos2d-x中讲解TileMap地图编辑器的高级用法(对象层部分)

这篇博客介绍了cocos2d-x中TileMap地图编辑器的高级用法,特别是对象层的添加和处理。通过添加对象层并设置属性,如playerBorn和Hp,便于在游戏中使用。博主强调了图层命名和图块尺寸的一致性,以及TileMap编辑器的灵活特性,如非标准图块切割。文章还预告了如何处理斜45度角地图的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • cocos2d-x中讲解TileMap地图编辑器的高级用法(对象层部分)

  • 发布日期:2012-11-02 11:55:53   作者:lovegame911 的BLOG  

  • cocos2d-x中讲解TileMap地图编辑器的高级用法(一)

    cocos2d-x中讲解TileMap地图编辑器的高级用法(二)

    cocos2d-x中讲解TileMap地图编辑器的高级用法(三)


    之前三篇地图主要讲的都是地图绘制有关的部分,这一篇就讲一讲如果添加对象层,以及如何处理对象层的信息

    我们点击 图层->添加对象层

    \

    这里就会出现一个新的对象层,区别于图层,用紫色标记

    \

    同样的,我们更改下名字,变为“object0”

    \

    光加了层没用,我们还得在层上标记具体的对象

    下面我们把光标点中“object0”对象层

    我们可以看见工具栏有了变化

    \

    前面与图层有关的按钮变为了灰色,后面与对象层有关的按钮变亮了

    点击 “插入对象”

    \


    按钮

    然后我们用鼠标在地图上拖出一个框来,格子数多少可以自由决定

    \


    ,不过一般我们就使用一格就好了,

    \


    按住右下角的小正方形可以拖拉改变格子的大小

    下面我们给对象添加属性

    右键点击对象,弹出下框

    \

    点击对象属性

    \

    这里上面第一排的名称是方便在编辑器查看用的,因此最上面的“名称”和类型处不填也可以。

    下面我们加一个新的属性,命名为playerBorn吧,表示游戏人物主角的出生地

    值可以指定为1,下面再定义个Hp的属性,值写个100,表示主角出生血量为100

    \

    确定保存,之后加入到我们的游戏工程目录下 www.it165.net

    第二步:读取属性信息


    01. CCTMXObjectGroup* group = map->objectGroupName("object0");//第一步,获取对象层 
    02. CCArray* objects = group->getObjects();//获取层上对象集合 
    03. CCDictionary* dict = NULL; 
    04. CCObject* pObj = NULL; 
    05. CCARRAY_FOREACH(objects, pObj)//遍历对象集合中的对象 
    06.
    07. dict = (CCDictionary*)pObj;// 
    08. if(!dict) 
    09. break
    10. const char* key = "playerBorn";//设定关键字,对应我们的"playerBorn" 
    11. CCString *str = (CCString*)dict->objectForKey(key); 
    12. if(str) 
    13.
    14. key = "x"
    15. float x = ((CCString*)dict->objectForKey(key))->floatValue();//获取对应对象的x坐标 
    16. key = "y"
    17. float y = ((CCString*)dict->objectForKey(key))->floatValue();//获取对应对象的y坐标 
    18. player->setPosition(ccp(x,y));//这里player是我们的主角sprite对象,设置坐标位置 
    19. key = "hp"
    20. int Hp = ((CCString*)dict->objectForKey(key))->intValue();//获得主角血量100 
    21. player->setHp(Hp); 
    22. break;//找到过后,退出循环 
    23.
    24. }

    这里有个地方大家要注意,在编辑器上,我们的x,y属性中的值是格子数,

    比如

    \


    这里,x是15,y是16,表示的是这个对象在地图的16行15列的格子上,

    但是在cocos2d-x中用读取出来的就不是15,16了,而是自动乘过块大小后在地图上的像素值了,所以这就是为什么我设置主角setPosition的时候,直接用的转换后的,xy值,而没有再用他们去乘以tile块的宽高的原因

    基本使用就是这样了,下一篇教大家如何处理斜45度角的地图。

    本文出自 “奶制品” 博客

  • 一篇教大家做好了一张地图,那么我们如何在真正的游戏中使用呢,这一篇就是主要教大家在cocos2d-x中使用

    我们把上一篇做好的地图保存后,放置在游戏项目的资源目录下

    那么我们包含地图的代码其实非常简单

     

    1. CCTMXTiledMap* map = CCTMXTiledMap::create("myTest.tmx"); 
    2. addChild(map);


     

    就用这两句话就把我们的地图tmx文件加入到layer,addchild之后,这张地图就会绘制出来了

    下面讲点新的东西

    第一:图块设置技巧及注意事项

    点击 图层  ->添加图层

    \

    \

    层上的名字我们改成英文,大家记住做程序的时候所有东西都改成英文,不管是文件名,标签名,包括文件存放路径都不要包括中文,反正除了我们游戏里面需要的界面或者对话,或者类似必须要用中文的东西,其他都一定用英文来表示。毕竟计算机是老外发明的,我们就按人家的规则来玩吧。

    修改后

    \

    这样表示层1,层2

    这样加多层之后就可以做一些遮罩效果了。

    现在说一下多层会遇到的一些问题

    每个层都可以用很多不用的图片,但是有一个规则一定要记住

    你在同一层使用的图片块大小一定要一致,比如你之前用32*32的图片块拼了一部分,那么后面你换了另一个图片的块大小也必须是32*32的,不能是其他大小,如果你用了两种大小,编辑器里面不会出问题,但是一旦你使用在cocos2d-x中

    CCTMXLayer类会报以下错误 www.it165.net

    CCAssert( m_uMaxGID >= m_pTileSet->m_uFirstGid &&
            m_uMinGID >= m_pTileSet->m_uFirstGid, "TMX: Only 1 tilset per layer is supported");

    看清楚了吗,TMX: Only 1 tilset per layer is supported

    “每层只支持一种图块尺寸设置”

    所以大家这个地方要注意

    这里再讲下第二个地图块切块要注意的地方

    如果有以前用过地图编辑器的同学肯定清楚,一般的地图编辑器设定了地图的块大小的话,那么图片的块切割大小也就必须是和地图单块的大小一致的

    但是我们的TileMap这款编辑器可以分开设置

    例如地图块大小设置32*32,图片块大小我可以设置成52*64,或者其他64*31

    都可以,等你设置好了,在地图块填充的时候就会发现,TileMap会自动以左下角为

    对齐点。比如我把一个图片切成60*64的图片效果如下

    \

    看见了吗,深色部分表示我放置的点,那么超过的部分就自动向上和向右延伸了,

    所以我们会看见在cocos2d-x的TileMaps资源下面会有这样的图存在

     

    \

    ok,图片设置基本就讲这么多,下一篇教大家加入对象层和设置tile块的一些属性,可以在游戏中做的一些事情。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值