zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    开学考试学生成绩管理Java
    动手动脑问题1
    数据库的链接错误分析
    ASP.NET自定义错误页面
    php declare
    HTTP运行期与页面执行模型
    分部类(Partial Classes)
    ASP.NET:小编浅谈泛型的使用
    Windows 2003 SP2下安装IIS无法复制文件
    php 的include require 区别
  • 原文地址:https://www.cnblogs.com/C-Plus-Plus/p/3986239.html
Copyright © 2011-2022 走看看