1. 程式人生 > >CCLabelTTF的多行顯示(僅限中文)

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

把這些拼起來就可以實現換行了。