您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x-3.0学习笔记之瓦片地图的使用

2016-08-07 12:47 411 查看
cocos3.0对cocos2.00做了很多的改变与优化,如果直接将cocos2.0里的游戏代码移植到cocos3.0中会报很多的错误。例如在获取瓦片地图的属性时更会如此。下面做个例子,首先我们将制作好的瓦片地图加载到程序中

auto m_map = TMXTiledMap::create("MarioMap.tmx");
this->addChild(m_map);


加载好瓦片地图之后,我们如何得到瓦片地图的属性



例如我们想得到enemy对象的x、y坐值

首先我们需要得到这个瓦片对象层中的对组,幸运的是cocos给我们提供了一个按对象组名获得对象组的api函数:

TMXObjectGroup* getObjectGroup(const std::string& groupName) const;

因此首先得到对象组objects:

TMXObjectGroup *group = m_map->getObjectGroup("objects");


得到对象组之后,我们要得到对象,在cocos2.0的版本中返回的对象为CCArray组,因此可以直接这样做

CCArray* objects = group->getObjects();
CCObject* object
CCARRAY_FOREACH(objects, object)
{
CCDictionary* dict = (CCDictionary*)object;
if (dict->valueForKey("type")->m_sString =="mushroom")
{
const CCString* x = dict->valueForKey("x");
const CCString* y = dict->valueForKey("y");

break;
}
}


首先创建一个数组将从对象组里得到的所有对象保存到数组里,然后遍历数组得到单个对象并将它转化成字典,然后在字典中进行字符串的索引找到自己需要的属性并得到它的值,得到的值为一个String字符串,还要转化成我们需要的float坐标值。

在cocos3.0中,这种方法行不通,因为TMXObjectGroup类的getObjects方法返回的不再是一个CCArray数组,而是一ValueVector。

因此需要这样做。

ValueVector vectorObjects = group->getObjects();
for (ValueVector::iterator iter = vectorObjects.begin();
iter != vectorObjects.end(); iter++)
{
if (iter->asValueMap().at("type").asString() == "mushroom")
{
float x = object.at("x").asFloat();
float y = object.at("y").asFloat();
break;
}


我们得到ValueVector对象然后按值索引得到我们需要的属性值.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐