• cocos2d-x-3.1 Text Labels(官方正式译文)


    介绍

    cocos2d支持(true type字体)标签,和纹理地图集标签。

    LabelTTF 标签的优缺点:

    • 全部 TTF 字体的长处: 随意大小,支持调整字距.
    • 易于使用. 不须要外部编辑器.
    • 创建或更新很慢。是由于会创建一个新的纹理, 尤其是在Android设备上.

    LabelAtlas, LabelBMFont 优缺点:

    • 创建和更新很快, 是由于不会创建一个新的纹理.
    • 字体能够进行定制 (阴影, 渐变, 模糊, 等)
    • 依赖于外部编辑器: AngelCode / Hiero editor, GIMP / Photoshop
    • 假设缩放文本会失真

    标签对象


    创建标签: 简单方式

    事例:

    LabelTTF* ttf1 = LabelTTF::create("Hello World", "Helvetica", 12, Size(245, 32), TextHAlignment::CENTER);

    fontName 是TTF字体所用的名字. 你也能够使用自定义的TTF文件. 你仅仅须要将 .ttf 的文件加入到你的项目中就可以.
    假设载入字体失败,它会使用UIFont类.
    注意: OpenGL的纹理大小会基于字体的大小和字体的名称进行自己主动计算.

    创建标签: 复杂方式

    你也能够使用以下的API创建纹理:

    LabelTTF* LabelTTF::create(const char *string, const char *fontName, float fontSize,
                                   const Size &dimensions, TextAlignment hAlignment, 
                                   VerticalTextAlignment vAlignment)

    注意:假设你使用这样的方式, 你仅仅能使用OpenGL的纹理尺寸.假设纹理不够大, 仅仅有部分的标签将被渲染.

    对齐方式

    * TextAlignmentLeft (left alignment)
    * TextAlignmentCenter (center alignment)
    * TextAlignmentRight (right alignment)

    假设你想改动对齐的方式能够使用 anchorPoint 属性. 事例:

    //left alignment
    label->setAnchorPoint(Vec2(0,0.5f)); 
    // right alignment
    label->setAnchorPoint(Vec2(1,0.5f));
    // center aligment (default)
    label->setAnchorPoint(Vec2(0.5f,0.5f));

    文字内容

    事例:

    label->setString("Hello World 2");

    注意: 你每次 setString 将会创建一个新的 OpenGL 纹理. 这意味着 setString 会创建一个新的 Label 而变的很慢. 所以, 不要使用Label对象, 假设你想常常的更新它们. 能够考虑使用 LabelAtlas 来取代.

    Color

    你仅仅须要调用颜色參数就能够改变你的字体颜色例如以下:

    label.setColor(Color3B(0,0,0)); // or
    label.setColor(Color4B(0,0,0,0)); // setOpacity

    Color3B 颜色事例:

    * white - (255,255,255)
    * black - (0,0,0)
    * blue - (0,0,255)
    * green- (0,255,0)
    * red - (255,0,0)
    * Grey – (84,84,84)
    * Brown – (165,42,42)
    * Pink – (255,192,203)
    * Purple – (160,32,240)
    * Yellow – (255,255,0)
    * Gold – (255,215,0)
    

    LabelBMFont标签

    介绍

    建议使用LabelBMFont 的方式来高速创建标签:

    • 能够定制和编辑位图(图片)
    • 你能够更新或初始化标签而没有消耗
    • 它很灵活.每一个字母的标签都能够当作一个Sprite
    • 支持字距的调整

    LabelBMFont标签解析是以官方代码格式来创建一个标签.要创建这些类的标签。你能够用这些编辑器:

    http://www.n4te.com/hiero/hiero.jnlp (java version)
    http://slick.cokeandcode.com/demos/hiero.jnlp (java version)
    http://www.angelcode.com/products/bmfont/ (windows only)
    http://glyphdesigner.71squared.com/ (Mac only)
    http://www.bmglyph.com (Mac only)
    http://tinyfont.com (Mac only)

    Java编辑器与Windows的编辑器:
    Windows编辑器是官方的代码编辑器
    Java编辑器:在Mac上执行
    Java编辑器:有额外的功能。如阴影,渐变,模糊

    创建一个LabelBMFont标签

    事例:

    LabelBMFont *label =LabelBMFont::create("hello font", "fonts/markerFelt.fnt", size.width/1.5, TextHAlignment::CENTER);
    

    因为字体大小是固定的。你须要细致考虑你须要的字体大小.因为纹理存储器,单独的每一个大小的字体可能是低效的.在这样的情况下,它缩小标签可能是有意义的,以实现不同的尺寸的大字体.因为标签不过一个Node,你能够通过scale属性来实现

    操作每一个字符

    因为CCLabelBMFont是CCSpriteSheet的子类,你能够像一个CCSprite一样操纵的每一个字符.第一个字符将用tag= 0加入。第二个字符将用tag= 1加入,依此类推 演示样例:

    LabelBMFont *label =LabelBMFont::create("Bitmap Font Atlas" , "bitmapFontTest.fnt");
    Sprite *char_B = label->getChildByTag(0); // character 'B'
    Sprite *char_m = label->getChildByTag(3); // character 'm'

    LabelAtlas标签


    介绍

    LabelAtlas是最快加入到cocos2d的标签,但它被BitmapFontAtlas所代替。LabelAtlas保持向后兼容性。可是你应该使用BitmapFontAtlas代替。

    创建一个LabelAtlas标签

    LabelAtlas* LabelAtlas::create(const char *string, const char *charMapFile, unsigned int itemWidth, int unsigned itemHeight, unsigned int startCharMap);

    事例:

    LabelAtlas *label1 = LabelAtlas::create ("Hello World","tuffy_bold_italic-charmap.png",48,64 ,' ');

    CharMapFile

    • charMapFile是一个包括了全部的字符的图像文件,每一个字符依据其ASCII值排序,图像不能包括超过256个字符
    • itemWidth是字符的宽度(以像素为单位)
    • itemHeight是字符的高度(以像素为单位)
    • startCharMap是在地图的第一个字符。

    LabelTTF 与 LabelAtlas

    LabelTTF和LabelAtlas之间的主要差别是地图集版本号(像全部其它的地图集类),使用一个预渲染全部字符的大纹理来绘制一个字符串。这意味着。画图的速度要快得多。由于假设你画100个标签,图形处理器不会读取100个纹理,但仅仅是在内存中保持一个纹理。可是,这也意味着,全部的字母将有一个固定的大小。

    假设你想要避开固定大小的限制。使用CCBitmapFontAtlas。

    LabelTTF为每一个标签创建一个纹理。因而LabelAtlas使用所提供的纹理(包括全部字符),能高速地渲染文字,因此使用LabelAtlas减少了内存消耗。

  • 相关阅读:
    jQuery 1.6 正式版发布
    EXT.NET Toolbar GridPanel自动宽度和高度的解决方案,引入Viewport
    sql server 2005 数据库状态 变成 可疑的解决方案
    将远程图片读取到本地,并保存
    ^M 替换 VI
    php ctags
    闲来无聊,想了下秒杀、抢购实现方法
    mysql 'OR','IN',‘union’效率分析
    js 全选
    yii rule
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4813084.html
Copyright © 2020-2023  润新知