加载骨骼动画产生的奇怪问题,android上解析plist时Frame的width有时读出为0,而在Windows上一切正常!

有一组骨骼动画文件,其中的一个很奇怪,如果我把它放在第一个加载,则正常、
如果把他放在最后加载(就是在加载它之前加载了好几个其他的动画),则其中的一个部件(弹簧的盖子)在android手机上会看不到。

起初以为是有名字重复了,后来发现是读取plist时,读出的float w = frameDict"width"].asFloat();为0,?下面是我在addSpriteFramesWithDictionary中加了日志。


void SpriteFrameCache::addSpriteFramesWithDictionary(ValueMap& dictionary, Texture2D* texture)
{
ValueMap& framesDict = dictionary"frames"].asValueMap();
int format = 0;

// get the format
if (dictionary.find(“metadata”) != dictionary.end())
{
ValueMap& metadataDict = dictionary"metadata"].asValueMap();
format = metadataDict"format"].asInt();
}

// check the format
CCASSERT(format >=0 && format <= 3, “format is not supported for SpriteFrameCache addSpriteFramesWithDictionary:textureFilename:”);

for (auto iter = framesDict.begin(); iter != framesDict.end(); ++iter)
{
ValueMap& frameDict = iter->second.asValueMap();
std::string spriteFrameName = iter->first;

if (spriteFrameName == “101-d.png”)
{ // 这里只执行了一次
log("2cocos2d: addSpriteFramesWithDictionary 101-d.png ");
}

SpriteFrame* spriteFrame = _spriteFrames.at(spriteFrameName);
if (spriteFrame)
{ // 未重复
log(“2cocos2d: addSpriteFramesWithDictionary exist: ‘%s’”, spriteFrameName.c_str());
continue;
}

if(format == 0)
{
float x = frameDict"x"].asFloat();
float y = frameDict"y"].asFloat();
float w = frameDict"width"].asFloat();
float h = frameDict"height"].asFloat();
float ox = frameDict"offsetX"].asFloat();
float oy = frameDict"offsetY"].asFloat();
int ow = frameDict"originalWidth"].asInt();
int oh = frameDict"originalHeight"].asInt();

if (spriteFrameName == “101-d.png”)
{ // 这里 w = 0, ow 正确,为什么 ?
log(“2cocos2d: addSpriteFramesWithDictionary 101-d.png: %f %f %d %d”, w, h, ow, oh);
// 这里强制改为30就正常了
w = 30;
}


只有在手机上是这样,在Windows上又是好的,如果第一个加载这个动画也是好的,很奇怪。动画文件在附件。

另,如何配置gdb来调试运行于手机中的C++程序?