刚到这个公司,开始进行cocos2d-x的真正项目开发,为了以后能够更好扩展,改动不大,决定使用3.X版本开发,而且使用ui编辑器。在导入的时候,今天遇到一个问题,Buffer is too small,搜了不少,但是都没有解决的方案,最后查到一个错误诱因,是因为ui中使用了label所致,于是我试了试,发现还真是label导致的问题,每次运行异常都发生在CCDevice.cpp的
bool setFont(const char * pFontName = NULL, int nSize = 0)中的strcpy_s(tNewFont.lfFaceName, LF_FACESIZE, fontName.c_str());,因为fontName.c_str()过长导致越界,tNewFont.lfFaceName长度只有32字节,然后看了fontName为什么过长,而其他的都正常,发现TextRead.cpp文件中
void TextReader::setPropsFromJsonDictionary(Widget *widget, const rapidjson::Value &options)。
std::string fontName = DICTOOL->getStringValue_json(options, P_FontName, "微软雅黑");
std::string fontFilePath = jsonPath.append(fontName);
label->setFontName(fontFilePath );
这几句代码将fontFilePath路径给增加了,实际上只用传递fontName就行,于是,改为
std::string fontName = DICTOOL->getStringValue_json(options, P_FontName, "微软雅黑");
// std::string fontFilePath = jsonPath.append(fontName);
label->setFontName(fontName);
编译之后正常。
cocos2d-x3.0.1,加载cocostudio ui编辑器导出的json文件出现"Buffer is too small" && 0解决方案