cocos2dx windows phone平台下CCLabelTTF自动换行的实现

博客讲述了在Cocos2d-x Windows Phone平台上,如何通过修改CCFreeType类的实现,解决CCLabelTTF中文文本无法自动换行的问题。作者注意到原实现仅适用于英文,通过读取文本、计算宽度并按等宽字体处理来实现中文换行。尽管存在性能和准确性问题,但提供了一个可行的解决方案。
摘要由CSDN通过智能技术生成

先吐个槽,刚准备发这条博客的时候居然发现账号被盗了,真是有人闲得蛋疼,顺便赞一个csdn的客服,处理的很快。


好了,言归正转。看了一下,自动换行的实现在CCFreeType这个类里,这个类的实现只是针对英文的,它采用空格断句的方式来进行操作,一个word一个word的加,如果发现超过规定的范围就会换行,但是对于中文来说,这个实现简直弱爆了,所以就会出现不能自动换行的情况。参考它的实现,做一点小的修改,基本原理如下

1、读一行文本出来,参考它的实现,算出这个文本的宽度

2、如果这个宽度没有超过,则直接显示

3、如果这个宽度走过了,则按等宽字体处理,根据宽度算出来总共应该是几行,然后按长度进行分隔换行。

注意这个实现有几个问题:

1、性能问题,其实是在计算出了所有的字之后才发现超过了,这个本来可以发现的更早,但是为了尽可能利用原有的代码结构,只用先这样了。

2、是以等宽字体的实现的,这个不一定正确,所以可能会出现某一些还是超过了的情况。


最后附上修改的diff,我使用的是2.2.4版本。

diff --git a/cocos2d-x-2.2.4/cocos2dx/platform/winrt/CCFreeTypeFont.cpp b/cocos2d-x-2.2.4/cocos2dx/platform/winrt/CCFreeTypeFont.cpp
index 9886d0a..46489af 100644
--- a/cocos2d-x-2.2.4/cocos2dx/platform/winrt/CCFreeTypeFont.cpp
+++ b/cocos2d-x-2.2.4/cocos2dx/platform/winrt/CCFreeTypeFont.cpp
@@ -368,13 +368,67 @@ FT_Error CCFreeTypeFont::addWord(const std::string& word)
     return error;
 }
 
+FT_Error CCFreeTypeFont::addLine(wchar_t* line, int size, bool wrap)
+{
+       std::vector<TGlyph> glyphs; // glyphs for the word
+       FT_BBox             bbox;   // bounding box containing all of the glyphs in the word
+       int maxWidth = m_inWidth ? m_inWidth : m_windowWidth;
+
+       FT_Vector pen = m_currentLine->pen;
+       FT_Error error = initWordGlyphs(glyphs, line, size, pen);
+       if (!error)
+       {
+               compute_bbox(glyphs, &bbox);
+               if (!wrap || bbox.xMax <= maxWidth)
+               {
+                      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值