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);
}
美术字:是由美术人员绘制的纹理图片表现的文字。
排版字:活体印刷字。建立一个个字块,然后采用拼接的方式组成文字。
三种绘制文字的方法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);
}
相关文章推荐
- cocos shader 之 黑白滤镜
- cocos shader 之 模糊滤镜
- cocos shader 之 马赛克滤镜
- Cocos2d-android 学习笔记
- libcocos2dx.a 出错解决。
- cocos2dx 3.x物理引擎对于setCollisionBitmask、setCategoryBitmask、setContactTestBitmask的理解
- Cocos2D中的纹理大小计算
- Cocos2D中的纹理大小计算
- Cocos2D中的纹理大小计算
- Cocos2d-x 如何输出 Android用电话 腰带Tag的Log刊物
- Cocostudio学习笔记(4) LoadingBar+ TextField
- cocos2dX 3.x获取渲染Image
- cocos2dx 消除箱子
- 初学者cocos2dx 写2048 为了和大家一起分享
- 关于CCPlatform Macro.h中的宏定义
- cocos2dx-3.8 xcode7编译64位报错
- Cocos2d-x移植到Android平台之Android-stuido
- [转载]cocos2d-x游戏开发(十四)用shader使图片背景透明
- [转载]使用SHA1来校验cocos2dx存储的数据是否被修改
- [转载]cocos2d-x3.2源码分析(一)类FileUtils--实现把资源放在Resources文件目录下达到多平台的引用