您的位置:首页 > 移动开发 > Cocos引擎

cocos2d 文字与字体

2015-10-04 09:55 309 查看
游戏中通常用两种文字表现方式:美术字和排版字。

美术字:是由美术人员绘制的纹理图片表现的文字。

排版字:活体印刷字。建立一个个字块,然后采用拼接的方式组成文字。

三种绘制文字的方法LabelAtlas、LabelBMFont、LabelTTF

LabelTTF 直接支持使用 TTF 字库,可以支持全部的中文,但是效率稍低。LabelBMFont 适合显示特定的文字,通过预先将文字生成图片,提高了效率,但是不能支持全部中文。如果使用的文字不多,组合多,但是文字的编码是连续的,比如数字,或者英文字符,那么 LabelAtlas 更加适合你。

LabelTTF

//创建TTF标签对象, 参数为显示文字内容,字体名字, 字体尺寸,标签尺寸,文字水平对齐方式,文字竖直对齐方式

 static Label * createWithTTF(const std::string& text, const std::string& fontFile, float fontSize,

        const Size& dimensions = Size::ZERO, TextHAlignment hAlignment = TextHAlignment::LEFT,

        TextVAlignment vAlignment = TextVAlignment::TOP);

使用方法:

auto label = Label::createWithTTF("Hello World", "fonts/MarkerFelt.ttf", 24);

LabelBMFont

//创建BMFont标签对象,参数为fnt文件名,显示文字内容,水平对齐方式,行宽度,坐标

static Label* createWithBMFont(const std::string& bmfontFilePath, const std::string& text,

        const TextHAlignment& alignment = TextHAlignment::LEFT, int maxLineWidth = 0,

        const Vec2& imageOffset = Vec2::ZERO);

   

使用方法  :

.h文件

virtual void update(float dt) override;

cocos2d::Label* _label0;

double time0;

.cpp文件

time0 = 0.0f;

_label0 = Label::createWithBMFont("fonts/bitmapFontTest4.fnt", "0");

_label0->setPosition(200, 200);

this->addChild(_label0, 100);

scheduleUpdate();

void HelloWorld::update(float dt)

{

    time0 +=dt;

    char time[10] = {0};

    sprintf(time, "%f", time0);

    _label0->setString(time);

}

   

LabelAltals

标签

    LabelAtals 类中的每一个字母或者符号都是独特的。它们可以有灵活可变的样式以及尺寸。

LabelAtals类中的字母或者符号也是可以由开发者定制的。 LabelAtlas 类的对象都不是必须包含26个

英文字母。 按照开发者的意愿, 也可以是只有10个字母的字体。

//LabelAltals标签类,参数为显示文字内容, 文字图片(.plist), 宽度,高度,字符Map

  static LabelAtlas* create(const std::string& string, const std::string& charMapFile, int itemWidth, int itemHeight, int startCharMap);

//参数为显示文字内容,文字图片(.plist)

  static LabelAtlas* create(const std::string& string, const std::string& fntFile);

LabelAltals用法:

.h

void LabelAtlasTest();

void step(float dt);

double _time;

   
.cpp

调用LabelAltasTest()方法

void HelloWorld::LabelAtlasTest()

{

    

    auto label1 = LabelAtlas::create("123 Test", "fonts/tuffy_bold_italic-charmap.plist");

    addChild(label1, 0, 1);

    label1->setPosition( Vec2(10,100) );

    label1->setOpacity( 200 );

    auto label2 = LabelAtlas::create("0123456789", "fonts/tuffy_bold_italic-charmap.plist");

    addChild(label2, 0, 2);

    label2->setPosition( Vec2(10,200) );

    label2->setOpacity( 32 );

    schedule(CC_CALLBACK_1(HelloWorld::step, this), "step_key");

}

void HelloWorld::step(float dt){

    _time += dt;

    char string[12] = {0};

    sprintf(string, "%2.2f Test", _time);

    //string.format("%2.2f Test", _time);

    auto label1 = (LabelAtlas*)getChildByTag(1);

    label1->setString(string);

    auto label2 = (LabelAtlas*)getChildByTag(2);

    sprintf(string, "%d", (int)_time);

    //string.format("%d", (int)_time);

    label2->setString(string);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: