教你如何解决RichText在2.2.x版本的中文换行bug

其实这个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)

:3::3::3::3::3::3:

:7:给你点32个赞

— Begin quote from ____

引用第2楼hanrea于2014-08-26 17:25发表的 :
:7: 给你点32个赞 http://www.cocoachina.com/bbs/job.php?action=topost&tid=225694&pid=1039153

— End quote

话说,既然2.2.5的ccUTF8都改了,RichText稍微修改下不就可以解决bug,都没人维护呢

因为3.x版本已经稳定了 2.x版本仅作重大bug的维护

给楼主点赞!好东东要支持

好东西要支持呀~~~

Lz下了你的源码,我替换了UIRichText的cpp文件,但是在重新编译player的时候报错了,UIRichText.cpp的252行说缺少CCRGBAProtocol文件,我引擎里没有。。
Lz快救命啊···
在线等

CCRGBAProtocol* colorRenderer = dynamic_cast<CCRGBAProtocol*>(elementRenderer);
我把这句先屏蔽掉了,不太清楚为啥要强转一次。
望Lz大大 速速 出现 回答下

— Begin quote from ____

引用第8楼liuyu7656于2014-10-14 10:27发表的 回 7楼(liuyu7656) 的帖子 :
CCRGBAProtocol* colorRenderer = dynamic_cast<CCRGBAProtocol*>(elementRenderer);
我把这句先屏蔽掉了,不太清楚为啥要强转一次。
望Lz大大 速速 出现 回答下 http://www.cocoachina.com/bbs/job.php?action=topost&tid=225694&pid=1074629

— End quote

官方的代码,我也不知道为什么。没这个类?你的版本比较旧吗?不强转应该也没啥吧

3.2版本的RichText对文本的换行符处理还是有问题,还有就是想要居中显示也比较麻烦,希望后边版本能优化这些功能

附件打不开,楼主能发一份给我吗

— Begin quote from ____

引用第11楼魏书洛阳于2014-11-10 18:08发表的 :
附件打不开,楼主能发一份给我吗 http://www.cocoachina.com/bbs/job.php?action=topost&tid=225694&pid=1095177

— End quote

你让我怎么发给你······

我刚试试,下载没问题

设置宽度是那个参数?我是用3.4的版本

哇偶~~~~~~~~~~~~~~