這個標題叫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