有一组骨骼动画文件,其中的一个很奇怪,如果我把它放在第一个加载,则正常、
如果把他放在最后加载(就是在加载它之前加载了好几个其他的动画),则其中的一个部件(弹簧的盖子)在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++程序?