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

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对象然后按值索引得到我们需要的属性值.
         
                                                                                                                                                                                          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值