CCLabelTTF的多行显示(仅限中文)

这个标题叫setDimensions的坑更贴切。缘起想要弄个自动换行的对话框功能,就想到了如何自动换行。

看到一个叫setDimensions的函数,设置可以显示的区域,超出部分进行换行.在网上找过一些例子发现似乎真的神奇可以自动换行。

但是实际上新建一个HelloWorld的例子发现出了问题,代码如下

CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24);
pLabel->setDimensions(CCSizeMake(50, 0)); // 设置显示区域
pLabel->setHorizontalAlignment(kCCTextAlignmentLeft); // 水平方向左对齐
    // position the label on the center of the screen
    pLabel->setPosition(ccp(origin.x + visibleSize.width/2,
                            origin.y + visibleSize.height - pLabel->getContentSize().height));
    // add the label as a child to this layer
    this->addChild(pLabel, 1);

结果出现的结果如下:

可以看到少了一段~如果把(CCSizeMake(50, 0)这个width设置得越小就越得越厉害.

好吧,再继续做实验,如果把"Hello World"换成"HelloWorld“效果就不一样了,中间的空格去掉。

就是这种结果

已经没有换行了,这里可以认为空格等同于\n换行符。也就是说这种情况下英文单词是不会被隔开的。

再来看看中文的显示。

中文的显示完全没有问题,这是因为中文单个就是个词,不像英文那样连在一起的,因此这个用于中文的多行显示是OK的。

因此纯中文的显示是可以用这个办法来偷懒的。

问题 是英文的多行显示怎么办?中英混合的多行显示又怎么办?

给个思路吧:通用的话只能根据编码来计算长度,够长度了就在后面+换行,或是重新创建一个新的CCLabelTTF

把这些拼起来就可以实现换行了。

 

转载自http://blog.csdn.net/nynyvkhhiiii/article/details/16987899

posted @ 2014-09-22 16:28  猿走天下  阅读(2808)  评论(0编辑  收藏  举报