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",25);
第一个参数:显示的文本
第二个参数:文本的字体
第三个参数:文本的大小
执行结果:
遍历所有的CCLabelTTF字体
#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
<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-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>
执行结果:
首先需要一张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");
执行结果:
首先需要一张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,"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,"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; }
执行结果: