Cocos2dx 小技巧 Label的換行(js實現)

項目在做聊天的時候會用到。因爲用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);

效果如圖:

https://img-blog.csdn.net/20140401214232765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3RhcnQ1MzA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章