Cocos2dx-js 小技巧 Label的换行

本文介绍了一种在游戏开发中实现LabelTTF自动换行的方法。通过自定义函数myWrap,可以根据指定长度对字符串进行截断并在每行末尾添加换行符,从而使得LabelTTF能够适应不同长度的文字,保持布局美观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目在做聊天的时候会用到。因为用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 { 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.youkuaiyun.com/20140401214232765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3RhcnQ1MzA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

转载于:https://www.cnblogs.com/guangyun/p/8397909.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值