首页 > 其他 > 详细

Cocos2dx 小技巧(三)Label的换行

时间:2014-04-03 00:08:58      阅读:725      评论:0      收藏:0      [点我收藏+]
有些技巧你不知道不要紧,但知道后会很牛逼。

近来玩上了刀塔传奇,这游戏做的真心不错。为什么会有这种评价呢?本人虽然是开发游戏的,但能让我玩超过一小时的游戏真心不多(不包括自己参与开发的游戏,嘿)。我虽然没玩过dota,但却是英雄联盟的狂热爱好者!排位白银分段啊有木有!求超越!

----------------

好了,这次又把Label这货拉出来鞭一鞭。
我先创建一个label
std::string star_str = "star is not star in the sky,it is on heart";//先定义一个string

auto m_label = LabelTTF::create(star_str,"Arial",25);//创建一个label
m_label->setPosition(Point(300,300));
this->addChild(m_label,2);
如下图所示,labelTTF是不会自动换行的,那要实现换行该怎么做呢?

bubuko.com,布布扣

说到Label如何换行,首先想到的就是设置label的尺寸,让它到了边界时要懂得自己换行,添加一行代码:
m_label->setDimensions(Size(200,200));//设置label的尺寸
注意这里使用的不是setContentSize();运行结果如下图
bubuko.com,布布扣

上面这种方法固然方便,但还是有它的局限性:假如我们做的是一个类似微信的聊天对话框,这种对话框一个特点就是会随着你文字长度的改变而改变。而如果我们在这里讲Label的尺寸给写死了,那对话框也就跟着失去它的灵活性了。
这里有没有更酷的解决办法么?答案是肯定的。
LabelTTF有一个好处就是会在字符串中有"\n"的地方换行,利用这个特点可以写一个自动换行的函数,参考代码如下:
//str是传入的字符串,length是每行的长度
std::string HelloWorld::myWrap(std::string str,int length)
{
	unsigned int beginPos = 0;  //字符串的初始位置
	std::string resultStr;		//返回的字符串


    std::vector<std::string > str_vec;  //创建一个字符串类型的顺序容器
    do   
    {  
        str_vec.push_back(str.substr(beginPos,length)); //substr函数的作用类似剪刀,将str中从beginPos到length之间的字符串剪下来,单独放入容器中 
        if (beginPos+length >str.size())  
        {  
            break;  //当要裁剪的长度超出str的长度,则退出循环
        }  
        else  
        {  
            beginPos += length; 
        }  
          
    } while (true);  
 
    for (unsigned int i = 0;i<str_vec.size();++i)  
    {  
        resultStr.append(str_vec.at(i)).append("\n"); //从容器逐一取出之前裁剪好的一段段字符串,分别在字符串后面加上换行符。append()类似胶水,将\n粘到字符串后面 
    }  


 //   resultStr.pop_back();  //这一句是将最后一个多余的\n给删掉


    return resultStr;  
}

现在用这种方法重写一次label的创建过程
std::string star_str = "star is not star in the sky,it is on heart";//先定义一个string

auto m_label = LabelTTF::create(myWrap(star_str,10),"Arial",25);//创建一个label
m_label->setPosition(Point(300,300));
this->addChild(m_label,2);

结果如下图所示:

bubuko.com,布布扣

恩,就酱紫啦。

尊重原创,转载请注明来源:

Cocos2dx 小技巧(三)Label的换行,布布扣,bubuko.com

Cocos2dx 小技巧(三)Label的换行

原文:http://blog.csdn.net/start530/article/details/22757281

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!