cocos中tinyxml在android下的问题

前端之家收集整理的这篇文章主要介绍了cocos中tinyxml在android下的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载请注明:http://www.jb51.cc/article/p-nsewocfp-mg.html

在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,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

猜你在找的Cocos2d-x相关文章