这个标题叫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
把这些拼起来就可以实现换行了。