CCDictionary的BUG吗?

我用的2.2.4开发的程序
bool MapObjectsLayer::init(CCTMXObjectGroup* pObjGroup)
{
//初始化
if (!CCLayer::init())
{
return false;
}
//解析
CCArray* objects = pObjGroup->getObjects();
unsigned int objectsCount = objects->count();
CCDictionary* dict = NULL;
CCObject* pObj = NULL;
if (objectsCount>0)
{
CCARRAY_FOREACH(objects,pObj)
{
dict = (CCDictionary*)pObj;
if (!dict)
{
break;
}
const char* key = “x”;
int x = ((CCString*)dict->objectForKey(key))->intValue();

        const char* key3 = "name";
        std::string name = ((CCString*)dict->objectForKey(key3))->getCString();
        std::string name_end = ".png";
        std::string spriteName = name + name_end;

        const char* key2 = "y";
        CCString* str_temp = (CCString*)dict->objectForKey(key2);
        int y = str_temp->intValue();

        CCSprite* objSprite = CCSprite::createWithSpriteFrameName(spriteName.c_str());
        objSprite->setPosition(ccp(x,y));
        addChild(objSprite);
    }
}

return true;

}
上面主要用来解析一个TMX地图的对象层CCTMXObjectGroup的物体object.
解析地图数据如下:






发现int y = str_temp->intValue();这行得出的不是文件中y的值,而x和name 字段都能读取出来。

:6:触控技术人员 速度过来看看 给个回复啊

没人遇到过这种问题吗?球答案

str_temp打印是什么值?

针对上面这行 解析出来的y居然是62

我的也是,从2.x到3.x一直是这样,y值很无厘头,跟正确的y好像没什么联系。。
我的做法就是手动加了一个ypos属性,自己把正确的y填进去,不过太麻烦了。

应该 是内部HASH的问题 要熟读这段代码的童鞋分析下原因才行

没人遇到这样的问题吗?难道你们都不用y坐标吗?晕

每日一顶 球回复 球解答

真奇怪 这个BUG,可能是VS2010的BUG,因为每次调试时 y的值都不对 ,其他值都对 ,但是程序运行时候显示的位置是正确的 。你呢

来个偏方…
打开配置文件 搜索y=" 替换成ypos="
给y属性统一换个名字
看看能不能解决问题

我都是用vs调试的,输出不对就没敢用,也不知道运行时获取的对不对。。

就是不喜欢偏方 所以才想搞清楚啊 只要名字不是y 好像都对。。。。真无语 。运行时的位置好像也是对的,就是调试时 显示的值不对。。。。