cocos2d 文字与字体

本文介绍了Cocos2d-x中三种文字渲染方式:LabelAtlas、LabelBMFont和LabelTTF。LabelTTF适用于全部中文但效率较低,LabelBMFont适合特定文字且效率高,LabelAtlas则适合连续编码的文字。通过实例展示了各方法的创建和使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

游戏中通常用两种文字表现方式:美术字和排版字。


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

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


三种绘制文字的方法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);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值