其实这个bug在半年前RichText刚出来的时候就提过,可惜现在看一看,2.2.x依旧存在这个bug。不过所幸的是,3.2版本已经修正了这个bug,所以根据3.2的代码,我这里也提出2.2.x版本的修改方法。
直接下载我附件里的文件,覆盖掉就成。2.2.2及之前版本木有RichText的,可以把文件放进UIWidgets,然后加进工程。(ccUTF8文件在support文件夹里)
改之前的运行结果:
改之后的运行结果:
如果有兴趣听我扯淡的话,可以继续往下看。
今天看了下3.2的代码,发现修改了ccUTF8文件的代码,多了个ConvertUTF文件夹(里面有三个文件),UIRichText.cpp里面加了个utf8_substr函数,然后改了handleTextRenderer函数。看完之后我当然是把ccUTF8复制过来替换掉原来(3.2版本ccUTF8.cpp有用到一个C++11的for循环,VS2010得把那句改掉),把ConvertUTF复制过来添加进工程,把utf8_substr和handleTextRenderer函数也复制进RichText.cpp里去,再把
handleTextRenderer里面的代码改成2.x版本的代码。由于我是2.2.2版本的,所以还得把命名空间ui改成gui,把类名前面的CC_EX_DLL删了。
编译,运行,成功了(当然,我把2.2.3的UIRichTextTest给弄进2.2.2了)。
然后想试试2.2.5能不能成功,先将ConvertUTF文件夹复制过来加进工程,编译,结果出错了。
发现原来是2.2.5使用了pch.h这个预编译头文件导致的,所以c文件就没法编译了。
所以我就试着将后缀改成cpp,编译提示重定义,然后我就发现2.2.5的ccUTF8文件里有
ConvertUTF的函数了。然后就干脆不要
ConvertUTF,直接使用2.2.5的
ccUTF8,然后将之前的
RichText复制过来,改了下函数(因为
getCharacterCountInUTF8String没声明成全局,所以就使用了cc_utf8_strlen函数
)。果然成功了。
接着我就试着将2.2.5的
ccUTF8放到2.2.2里面去,结果竟然出错了,原来是
CCEditBoxImplWin使用了cc_utf8_strlen,2.2.2的
cc_utf8_strlen有2个参数,
2.2.5的
cc_utf8_strlen的函数改写了,只有1个参数。所以我就给
cc_utf8_strlen加上了个没用的参数(设个默认值,所以可以传1个参数或是2个参数都可以),编译成功。
就是这样,中文换行的bug就解决了~~~好像说的挺乱的,凑合着看吧,见谅哟
RichText中文换行bug修正.rar (22 KB)

给你点32个赞