cocos中tinyxml在android下的问题

来源:互联网 发布:java远程连接ssh主机 编辑:程序博客网 时间:2024/06/06 08:44

转载请注明:http://blog.csdn.net/einsteinlike/article/details/41543237

在ios_mac中  读取xml时会这么写:

    tinyxml2::XMLDocument configXML;    std::string path = FileUtils::getInstance()->fullPathForFilename("maps/maps.xml");        CCLog("liujianlog : %s " ,path.c_str());    configXML.LoadFile(path.c_str());
但是移植到android后这部分就会出现闪退,通过log看出是loadFile内部异常:

XMLError XMLDocument::LoadFile( const char* filename ){    DeleteChildren();    InitDocument();    FILE* fp = 0;#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (CC_TARGET_PLATFORM != CC_PLATFORM_MARMALADE)    errno_t err = fopen_s(&fp, filename, "rb" );    if ( !fp || err) {#else    fp = fopen( filename, "rb" );//返回了NULL    if ( !fp) {#endif        SetError( XML_ERROR_FILE_NOT_FOUND, filename, 0 );//就是这里        return _errorID;    }    LoadFile( fp );    fclose( fp );    return _errorID;}

这里就要说一下fopen的用法了,android下是支持标准库中的fopen的,但是,fopen必须是一个暴露出来的文件,而cocos将资源文件都打包在了apk中!所以fopen读取不到了就。

解决方法是使用 getFileDataFromZip ;cocos的fileutils_android中的getFileData内部就是使用的这个方法,所以可以这样写:

    long size;    char *pFileContent = (char*)FileUtils::getInstance()->getFileData( "maps/maps.xml" , "r", &size);    tinyxml2::XMLDocument configXML;    configXML.Parse(pFileContent, size);
参考:http://codingnow.cn/cocos2d-x/939.html



0 0
原创粉丝点击