Cocos2d-X中显示文本的方式有下面三种:
CCLabelTTF: 使用系统字体,每个字符串会生成一个纹理,显示效率比较低下,适合不变化的文字
CCLabelAtlas: 使用NodeAtlas优化渲染,适合经常变化的数字,比如分数,金钱之类的数字
CCLabelBMFont: 使用CCSpriteBatchNode,很灵活,每个字符都是一个精灵,可以对每个字符进行操作,直接使用图片,将文字画在
设置文本的字体为CCLabelTTF
//在层上设置属性 bool Label::init() { //初始化父类CCLayer CCLayer::init(); //设置窗口的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建一个字体,并且以此为字体的文字 CCLabelTTF* label = CCLabelTTF::create("This is Text", "Arial", 25); addChild(label); //设置文字的位置 setPosition(ccp(winSize.width/2, winSize.height/2)); return true; }
代码解析:
CCLabelTTF* label = CCLabelTTF::create("This is Text", "Arial", 25);
第一个参数:显示的文本
第二个参数:文本的字体
第三个参数:文本的大小
执行结果:
遍历所有的CCLabelTTF字体
在Label.h中添加下面的代码
#ifndef __Label_H__ #define __Label_H__ #include "cocos2d.h" USING_NS_CC ; class Label : public CCLayer { public: bool init(); static CCScene* scene(); bool ccTouchBegan(CCTouch*,CCEvent); void ccTouchMoved(CCTouch*, CCEvent*); CREATE_FUNC(Label); }; #endif
在Label.cpp中添加下面的代码
<span style="color:#000000;">#include "Label.h" USING_NS_CC ; //包含所有的CCLabelTITF字体 static const char* _font[] = { "AppleGothic", "HiraKakuProN-W6", "HiraKakuProN-W3", "MarkerFelt-Thin", "STHeitiK-Medium", "STHeitiK-Light", "TimesNewRomanPSMT", "Helvetica-Oblique", "Helvetica-BoldOblique", "Helvetica", "Helvetica-Bold", "TimesNewRomanPS-BoldMT", "TimesNewRomanPS-BoldItalicMT", "TimesNewRomanPS-ItalicMT", "Verdana-Bold", "Verdana-BoldItalic", "Verdana", "Verdana-Italic", "Georgia-Bold", "Georgia", "Georgia-BoldItalic", "Georgia-Italic", "ArialRoundedMTBold", "TrebuchetMS-Italic", "TrebuchetMS", "Trebuchet-BoldItalic", "TrebuchetMS-Bold", "STHeitiTC-Light", "STHeitiTC-Medium", "GeezaPro-Bold", "GeezaPro", "Courier", "Courier-BoldOblique", "Courier-Oblique", "Courier-Bold", "ArialMT", "Arial-BoldMT", "Arial-BoldItalicMT", "Arial-ItalicMT", "STHeitiJ-Medium", "STHeitiJ-Light", "ArialHebrew", "ArialHebrew-Bold", "CourierNewPS-BoldMT", "CourierNewPS-BoldItalicMT", "CourierNewPSMT", "Thonburi-Bold", "AmericanTypewriter", "AmericanTypewriter-Bold", "STHeitiSC-Medium", "STHeitiSC-Light", "HelveticaNeue", "HelveticaNeue", "HelveticaNeue-Bold", "Zapfino" }; CCScene* Label::scene() { //创建一个创建 CCScene *s = CCScene::create(); //创建一个层 CCLayer* layer = Label::create(); //将场景加到蹭上 s->addChild(layer); //返回场景 return s; } //在层上设置属性 bool Label::init() { //初始化父类CCLayer CCLayer::init(); //设置窗口的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); int height = 0; //遍历CCLabelTIF中的所有字体 for(int i = 0; i < sizeof(_font) / sizeof(*_font); i++) { //创建一个字体,并且以此为字体的文字 CCLabelTTF* label = CCLabelTTF::create(_font[i], _font[i], 25); //得到字体的宽度和高度 CCSize size = label->boundingBox().size; addChild(label); //设置文字的位置 label->setPosition(ccp(winSize.width / 2, height + size.height/2)); height += size.height; } setTouchEnabled(true); setTouchMode(kCCTouchesOneByOne); return true; } bool Label::ccTouchBegan(CCTouch* touch,CCEvent) { return true; } void Label::ccTouchMoved(CCTouch* touch, CCEvent*) { // 获得触摸移动的距 CCPoint ptDelta = touch->getDelta(); // 只上下滑动的方法 setPositionY(getPositionY() + ptDelta.y); } </span>
执行结果:
使用CCLabelAtlas显示彩色的字体
首先需要一张png格式的图片,并且将图片放在Resource目录中
然后添加下面的代码
//在层上设置属性 bool LabelAtlas::init() { //初始化父类CCLayer CCLayer::init(); //设置窗口的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建一个Atlas字体 //第一个参数:显示的内容 //第二个参数:图片名 //第三个参数:图片的宽度 //第四个参数:图片的高度 //第五个参数:图片中第一个字的ASCALL码值 CCLabelAtlas* label = CCLabelAtlas::create("18937302", "labelatlasimg.png", 24, 32, '0'); addChild(label); //设置文字显示的位置 label->setPosition(winSize.width/2, winSize.height/2); return true; }
执行结果:
在上面的代码中添加下面的代码实现修改文本
//改变显示的数字 label->setString("87899");
执行结果:
使用CCLabelBMFont:显示彩色的字
首先需要一张png格式的图片,并且将图片放在Resource目录中
然后添加下面的代码
//在层上设置属性 bool BMFont::init() { //初始化父类CCLayer CCLayer::init(); //设置窗口的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //设置文字显示的位置 CCPoint ptCenter = ccp(winSize.width / 2, winSize.height / 2); //创建一个Atlas字体 //第一个参数:显示的内容 //第二个参数:图片文件的描述文件名 CCLabelBMFont* label = CCLabelBMFont::create("abc", "bitmapFontTest.fnt"); addChild(label); //设置文字显示的位置 label->setPosition(ptCenter); return true; }
执行结果:
使用CCLabelBMFont实现旋转字符
//在层上设置属性 bool BMFont::init() { //初始化父类CCLayer CCLayer::init(); //设置窗口的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //设置文字显示的位置 CCPoint ptCenter = ccp(winSize.width / 2, winSize.height / 2); //创建一个Atlas字体 //第一个参数:显示的内容 //第二个参数:图片文件的描述文件名 CCLabelBMFont* label = CCLabelBMFont::create("abc", "bitmapFontTest.fnt"); addChild(label); //设置文字显示的位置 label->setPosition(ptCenter); //将label中的字符输入数组中 CCArray* arr = label->getChildren(); //选择数组中的字符,objectAtIndex(0)表示选择数组中的第0个字符 CCSprite* sprite = (CCSprite*)arr->objectAtIndex(0); //字符旋转90度 sprite->setRotation(90); return true; }
执行结果:
使用CCLabelBMFont实现放大字符
//在层上设置属性 bool BMFont::init() { //初始化父类CCLayer CCLayer::init(); //设置窗口的尺寸 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //设置文字显示的位置 CCPoint ptCenter = ccp(winSize.width / 2, winSize.height / 2); //创建一个Atlas字体 //第一个参数:显示的内容 //第二个参数:图片文件的描述文件名 CCLabelBMFont* label = CCLabelBMFont::create("abc", "bitmapFontTest.fnt"); addChild(label); //设置文字显示的位置 label->setPosition(ptCenter); //将label中的字符输入数组中 CCArray* arr = label->getChildren(); //选择数组中的字符,objectAtIndex(0)表示选择数组中的第0个字符 CCSprite* sprite = (CCSprite*)arr->objectAtIndex(0); //字符放大2倍 sprite->setScale(2); return true; }
执行结果: