• 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“效果就不一样了,中间的空格去掉。

    就是这种结果

    已经没有换行了,这里可以认为空格等同于 换行符。也就是说这种情况下英文单词是不会被隔开的。

    再来看看中文的显示。

    中文的显示完全没有问题,这是因为中文单个就是个词,不像英文那样连在一起的,因此这个用于中文的多行显示是OK的。

    因此纯中文的显示是可以用这个办法来偷懒的。

    问题 是英文的多行显示怎么办?中英混合的多行显示又怎么办?

    给个思路吧:通用的话只能根据编码来计算长度,够长度了就在后面+换行,或是重新创建一个新的CCLabelTTF

    把这些拼起来就可以实现换行了。

    转载自http://blog.csdn.net/nynyvkhhiiii/article/details/16987899

  • 相关阅读:
    Thinkph5——模型软删除
    ThinkPHP5——URL参数带中文,报"模块不存在"
    ThinkPHP5多模板配置二级域名
    使用Composer安装阿里云短信失败
    GIT快速入门
    Python全栈之路系列----之-----面向对象4(接口与抽象,多继承与多态)
    Python全栈之路系列----之-----面向对象3(继承与派生)
    Python全栈之路系列----之-----面向对象1(初识)
    Python全栈之路系列----之-----异常处理
    Python全栈之路系列----之-----内置函数和匿名函数lamdba
  • 原文地址:https://www.cnblogs.com/C-Plus-Plus/p/3986239.html
Copyright © 2020-2023  润新知