Cocos2d-x Label 试用浅析
2014-04-28 17:14
225 查看
1 CCLabelProtocol是文本标签的父类,CCLabelProtocol有三个直接子类,都是cocos2d-x中用来创建文本标签的,下面是类结构图
2 CCLabelTTF不仅是CCLabelProtocol的子类,其实也是CCSprite的子类,CCLabelTTF是用来渲染文本标签的,可以指定字体,每次设置字符串内容时,都需要重新创建纹理和渲染,性能不好,所以通常情况下使用CCLabelAtlas或者CCLabelBMFont代替。
3 CCLabelAtlas不仅是CCLabelProtocol的子类,其实也是CCAtlasNode的子类,CCAtlasNode封装了一个CCTextureAtlas的变量,CCTextureAtlas初始化图片文件的时候会把图片加载到缓存(CCTextureCache)中。CCLabelAtlas的绘制效率高,但是限制性太多,没有CCLabelBMFont灵活。
4 CCLabelBMFont不仅是CCLabelProtocol的子类,其实也是CCSpriteBatchNode的子类,创建CCLabelBMFont对象需要一个字符串和一个fnt格式的文件(字库)
下面是对对三种CCLabel的试用代码示例:
[cpp]
view plaincopy
bool HelloWorld::init()
{
bool bRet = false;
do
{
//////////////////////////////////////////////////////////////////////////
// super init first
//////////////////////////////////////////////////////////////////////////
CC_BREAK_IF(! CCLayer::init());
<span style="white-space:pre"> </span>m_time = 0;
CCLabelTTF* Label1 = CCLabelTTF::create("Chinese human","Marker Felt",30);//第一个参数是要显示的文字,第二个是字体,<span style="white-space:pre"> </span>//第三个是文字大小
Label1->setPosition(ccp(200,300));
this->addChild(Label1);
[cpp]
view plaincopy
//第一个参数是显示的文字,第二个是文字图片,第三个是图片里每个文字的宽度,四是高度,五是图片里第一个字符
CCLabelAtlas* label2 = CCLabelAtlas::create("5121314","tuffy_bold_italic-charmap.png",48,64,' ');
label2->setPosition(ccp(70,200));
this->addChild(label2,1,1);//设置tag为1,方便在 step 里引用
label2->setColor(ccRED);//设置字体颜色为红色
CCActionInterval* act1 = CCFadeOut::create(0.2f);
CCActionInterval* act2 = act1->reverse();
CCSequence* seq = CCSequence::create(act1,act2,NULL);
CCAction* repeat = CCRepeatForever::create(seq);
label2->runAction( repeat );
[cpp]
view plaincopy
<span style="white-space:pre"> </span>//第一个参数是显示的文字,第二个参数是字体文件
CCLabelBMFont* label3 = CCLabelBMFont::create("itisgood","bitmapFontTest.fnt");
label3->setPosition(ccp(70,100));
this->addChild(label3,1,2);
CCSprite* BChar = (CCSprite*) label3->getChildByTag(0);//取出"itisgood"中的‘i’字符,可对它进行操作
CCSprite* FChar = (CCSprite*) label3->getChildByTag(2);
[cpp]
view plaincopy
void HelloWorld::step(float dt)
{
m_time += dt;//定时器实时更新计数
char time_str[12] = {0};
sprintf(time_str,"%2.2f",m_time);
CCLabelAtlas* label2 = (CCLabelAtlas*)this->getChildByTag(1);
label2->setString(time_str);
}
2 CCLabelTTF不仅是CCLabelProtocol的子类,其实也是CCSprite的子类,CCLabelTTF是用来渲染文本标签的,可以指定字体,每次设置字符串内容时,都需要重新创建纹理和渲染,性能不好,所以通常情况下使用CCLabelAtlas或者CCLabelBMFont代替。
3 CCLabelAtlas不仅是CCLabelProtocol的子类,其实也是CCAtlasNode的子类,CCAtlasNode封装了一个CCTextureAtlas的变量,CCTextureAtlas初始化图片文件的时候会把图片加载到缓存(CCTextureCache)中。CCLabelAtlas的绘制效率高,但是限制性太多,没有CCLabelBMFont灵活。
4 CCLabelBMFont不仅是CCLabelProtocol的子类,其实也是CCSpriteBatchNode的子类,创建CCLabelBMFont对象需要一个字符串和一个fnt格式的文件(字库)
下面是对对三种CCLabel的试用代码示例:
[cpp]
view plaincopy
bool HelloWorld::init()
{
bool bRet = false;
do
{
//////////////////////////////////////////////////////////////////////////
// super init first
//////////////////////////////////////////////////////////////////////////
CC_BREAK_IF(! CCLayer::init());
<span style="white-space:pre"> </span>m_time = 0;
CCLabelTTF* Label1 = CCLabelTTF::create("Chinese human","Marker Felt",30);//第一个参数是要显示的文字,第二个是字体,<span style="white-space:pre"> </span>//第三个是文字大小
Label1->setPosition(ccp(200,300));
this->addChild(Label1);
[cpp]
view plaincopy
//第一个参数是显示的文字,第二个是文字图片,第三个是图片里每个文字的宽度,四是高度,五是图片里第一个字符
CCLabelAtlas* label2 = CCLabelAtlas::create("5121314","tuffy_bold_italic-charmap.png",48,64,' ');
label2->setPosition(ccp(70,200));
this->addChild(label2,1,1);//设置tag为1,方便在 step 里引用
label2->setColor(ccRED);//设置字体颜色为红色
CCActionInterval* act1 = CCFadeOut::create(0.2f);
CCActionInterval* act2 = act1->reverse();
CCSequence* seq = CCSequence::create(act1,act2,NULL);
CCAction* repeat = CCRepeatForever::create(seq);
label2->runAction( repeat );
[cpp]
view plaincopy
<span style="white-space:pre"> </span>//第一个参数是显示的文字,第二个参数是字体文件
CCLabelBMFont* label3 = CCLabelBMFont::create("itisgood","bitmapFontTest.fnt");
label3->setPosition(ccp(70,100));
this->addChild(label3,1,2);
CCSprite* BChar = (CCSprite*) label3->getChildByTag(0);//取出"itisgood"中的‘i’字符,可对它进行操作
CCSprite* FChar = (CCSprite*) label3->getChildByTag(2);
[cpp]
view plaincopy
void HelloWorld::step(float dt)
{
m_time += dt;//定时器实时更新计数
char time_str[12] = {0};
sprintf(time_str,"%2.2f",m_time);
CCLabelAtlas* label2 = (CCLabelAtlas*)this->getChildByTag(1);
label2->setString(time_str);
}
相关文章推荐
- Cocos2d-x Label 试用浅析
- cocos2d-x开发之sqlite数据库加密研究(sqlite3.c代码浅析1)
- cocos2d-x之锚点浅析
- COCOS2D-X中UI动画导致闪退与UI动画浅析
- 浅析cocos2d-x实现中文支持
- cocos2d-x 浅析斗地主游戏分牌动作
- 【iOS-Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;
- cocos2d-x Label描边问题以及解决办法
- Cocos2d-x 定时器的浅析
- cocos2d-x 动作实现的浅析
- cocos2d-x 3.1中luasocket试用
- cocos2d-x 3.6 mac下的试用(粒子,触摸事件,图片)
- 【Cocos2d入门教程十二】浅析Cocos2d下的粒子系统
- cocos2d-javascript试用小记
- Cocos2d-x 定时器的浅析
- cocos2d-x引擎浅析
- 【Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;
- 移动开发之浅析cocos2d-x的中文支持问题
- 移动开发之浅析cocos2d-x的中文支持问题
- 【Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;