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度角的地图。

本文出自 “奶制品” 博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值