【已解决】请教各位大侠关于addSpriteFramesWithFile的问题

出现问题的代码段其实很简单,我用的引擎版本是3.1.1

RoleFrameCache    =   SpriteFrameCache::getInstance();
RoleFrameCache->addSpriteFramesWithFile("Animation/"+*plist+".plist");

刚开始在mac上运行整个程序是没有crash的,之后我用“cocos run -p android”编译到我的android手机上测试运行,程序crash了
我设置CCLOG去找出问题的程序段,调试的信息如图所示,

发现运行到addSpriteFramesWithFile这个函数时出错,进而我在引擎里找诱发crash的方法是

void SpriteFrameCache::addSpriteFramesWithDictionary(ValueMap& dictionary, Texture2D* texture)

从调试的信息来看,当还没有进入到第一次循环就已经crash了,我估计是,我比较费解。

 CCASSERT(format >=0 && format <= 3, "format is not supported for SpriteFrameCache addSpriteFramesWithDictionary:textureFilename:");
 
 CCLOG("Enter the loop\n");
 
    for (auto iter = framesDict.begin(); iter != framesDict.end(); ++iter)
    {
        CCLOG("%d\n",i++);
        ValueMap& frameDict = iter->second.asValueMap();
        std::string spriteFrameName = iter->first;
        SpriteFrame* spriteFrame = _spriteFrames.at(spriteFrameName);
        if (spriteFrame)
        {
            continue;
 
        }

请各位大侠帮帮忙解答一下,多谢!

你的*plist是什么东西啊?

*plist是一个string,在前面定义的,这个句子最终将指向plist文件的路径

你看看Android工程下面的asset文件夹下面有图片资源吗?我不知道新版本编译会不会拷贝资源过去

有的,事实上程序已经找到了资源,然后在尝试读取这个plist文件的时候,crash了
在尝试跑循环读列表的时候
for (auto iter = framesDict.begin(); iter != framesDict.end(); ++iter)

  • =…就这么愉快的沉了么

plist没有问题?换个plist试试。

问题解决,原来的plist是二进制的编码的,然后我把他转成xml格式,我觉得问题是不是在android平台上不支持这种二进制格式的plist,新手表示不清楚:3:

Android打包成apk时会对文件进行压缩,可能是这种压缩破坏了二进制的格式,所以无法正常读取