項目在做聊天的時候會用到。因爲用setContentSize方法太侷限!
因爲 :假如我們做的是一個類似微信的聊天對話框,這種對話框一個特點就是會隨着你文字長度的改變而改變。
而如果我們在這裏講Label的尺寸給寫死了,那對話框也就跟着失去它的靈活性了。
LabelTTF有一個好處就是會在字符串中有”\n”的地方換行,利用這個特點可以寫一個自動換行的函數.
根據傳入一行的長度和字串內容,來重新拼接字符串,將“\n”加在每一行的末尾。
例如:
var str = "star is not star in the sky,it is on heart"
那麼根據上述邏輯,如果傳入行的長度爲10,那麼重新拼接後的字串爲
“star is no
t star in
the sky,it
is on hea
rt
”
現在可以貼出代碼了:
Util.myWrap = function(str,length)
{
var beginPos = 0; //字符串的初始位置
var resultStr = ""; //返回的字符串
// std::vector<std::string > str_vec; //創建一個字符串類型的順序容器
var str_vec = [];
do
{
str_vec.push(str.substr(beginPos,length)); //substr函數的作用類似剪刀,將str中從beginPos到length之間的字符串剪下來,單獨放入容器中
if (beginPos+length >str.length)
{
break; //當要裁剪的長度超出str的長度,則退出循環
}
else
{![這裏寫圖片描述](http://img.blog.csdn.net/20161226112650367?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaWFtbGVnZW5kYXJ5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
beginPos += length;
}
} while (true);
for (var i = 0;i < str_vec.length;++i)
{
resultStr = resultStr.concat(str_vec[i]).concat("\n"); //從容器逐一取出之前裁剪好的一段段字符串,分別在字符串後面加上換行符。concat類似膠水,將\n粘到字符串後面
}
// resultStr.pop_back(); //這一句是將最後一個多餘的\n給刪掉
return resultStr;
}
resultStr就是重新拼接後的字符串。
然後我們用它:
var star_str = "star is not star in the sky,it is on heart";//先定義一個string
var m_label = new cc.LabelTTF(Util.myWrap(star_str,10),"Arial",25);//創建一個label
m_label.setPosition(cc.p(300,300));
self.addChild(m_label,2);
效果如圖: