2.标签CCLabelTTF,CCLabelAtlas,CCLabelBMFont
1 CCLabel
A 標簽CCLabelTTF
| CCLabelTTF * ttf = CCLabelTTF::create("LabelTTF", "Courier", 100); |
第一個參數為,要顯示的字符串,第二個能數位字體,第三個參數為大小。
優點:簡單易操作,無需任何額外的資源
缺點:由于它的運行原理,是先將字符轉化為圖片紋理,然后渲染至屏幕。所以不適合于變動的文字。易于靜態的顯示。
B CCLabelAtlas
| CCLabelAtlas * atlas = CCLabelAtlas::create(“123.45”,”font/fps_images.png”,16,32,’.’); |
第一個參數為要顯示的字符串,第二個參數為圖片,第三個參數每一個字符的長度,第四個為每一個字符的高度,第五個位第一個字符的ASSIC。
優點:將等寬,等高的字符,放到一張大圖中去,然后通過要顯示的字符的ASSIC去找相應的圖片渲染到屏幕中去,這樣一次加載,多次取用,相比TTF效率要高。
缺點:素材需要依賴于美工,顯示內容局限性大。
C CCLabelBMFont
| CCLabelBMFont * bm = CCLabelBMFont::create(“ABCD”,”fonts/bitmapFontTest.fnt”); |
CC_DLL? CC_DLL CCLabelBMFont 繼承自CCSpriteBatchNode,所以本身采用了CCSpriteBatchNode的優化功能。第一個參數為要顯示的字符串,第二個參數為要加載圖片的資源文件。CCLabelBMFont中的每一個字符都是一個已加載到CCSpriteBatchNode中的CCSprite。可以通過接口取出。這種實現方式既實現了優化的效果,也更靈活。
優點:顯示字體多樣,內部完成優化效率高。
缺點:需要依賴美工制作fnt文件。
| CCLabelBMFont * bm = CCLabelBMFont::create("Good Year","fonts/bitmapFontTest.fnt"); bm->setPosition(ccp(winSize.width/2,winSize.height/2)); addChild(bm); bm->setTag(BM); CCArray * array = bm->getChildren(); CCSprite * G = (CCSprite*)array->objectAtIndex(0); |
?
| CCSprite * G = (CCSprite *)bm->getChildByTag(0); |
?
| T10Label.h |
| #ifndef __T10Label_H__ #define __T10Label_H__ ? #include "cocos2d.h" USING_NS_CC; class T10Label :public CCLayer { public: ??? static CCScene * scene(); ??? CREATE_FUNC(T10Label); ??? bool init(); ? ??? enum LABEL ??? { ??????? TTF, ATLAS, BM ??? }; ? ??? void mySchedule(float dt); ? }; #endif |
| T10Label.cpp |
| #include "T10Label.h" #include "AppMacros.h" ? ? CCScene *T10Label::scene() { ??? CCScene * scene = CCScene::create(); ??? T10Label * layer = T10Label::create(); ??? scene->addChild(layer); ??? return scene; } bool T10Label::init() { ??? CCLayer::init(); ? ??? CCLabelBMFont * bm = CCLabelBMFont::create("GOOD YEAR", "fonts/bitmapFontTest.fnt"); ??? //下面的方式是將bm存入層中 ??? addChild(bm); ? ??? //從bm中取出各個元素 ??? CCArray * array = bm->getChildren(); ? ??? CCObject * obj; ??? //將元素隨機放在不同的位置 ??? CCARRAY_FOREACH(array, obj) ??? { ??????? CCSprite * spr = (CCSprite *)obj; ??????? spr->setPosition(ccp(CCRANDOM_0_1() * 480, CCRANDOM_0_1() * 320)); ??? } ? ??? //循環將精靈放在不同的位置 ??? CCARRAY_FOREACH(array,obj) ??? { ??????? static float x = 100; ??????? static float y = 100; ??????? //將(CCSprite *)強轉 ??????? CCSprite * spr = (CCSprite *)obj; ??????? CCMoveTo * to = CCMoveTo::create(2, ccp(x += 30, y)); ??????? spr->runAction(to); ??? } ? ??? return true; } ? void T10Label::mySchedule(float dt) { ??? static float count = 0; ??? count += dt; ??? CCString * str = CCString::createWithFormat("%d", (int)count); ??? //CCLabelTTF * ttf = (CCLabelTTF *)getChildByTag(TTF); ??? //ttf->setString(str->getCString()); ? ??? CCLabelAtlas * atlas = (CCLabelAtlas*)getChildByTag(ATLAS); ??? atlas->setString(str->getCString()); } |
| 運行結果:
|
| 當代碼是如下是: |
| #include "T10Label.h" #include "AppMacros.h" ? ? CCScene *T10Label::scene() { ??? CCScene * scene = CCScene::create(); ??? T10Label * layer = T10Label::create(); ??? scene->addChild(layer); ??? return scene; } bool T10Label::init() { ??? CCLayer::init(); ??? CCLabelTTF * ttf = CCLabelTTF::create("Score", "Courier", 20); ??? ttf->setPosition(ccp(winSize.width / 2, winSize.height / 2)); ??? addChild(ttf); ??? //設置字體的顏色 ??? ttf->setFontSize(50); ??? //設置字體的名稱 ??? ttf->setFontName("Courier New"); ??? //設置字符串 ??? ttf->setString("xxxx"); ??? ttf->setFontFillColor(ccc3(255,0,0),true); ??? ttf->setTag(TTF); ? ??? return true; } ? void T10Label::mySchedule(float dt) { ??? static float count = 0; ??? count += dt; ??? CCString * str = CCString::createWithFormat("%d", (int)count); ??? //CCLabelTTF * ttf = (CCLabelTTF *)getChildByTag(TTF); ??? //ttf->setString(str->getCString()); ? ??? CCLabelAtlas * atlas = (CCLabelAtlas*)getChildByTag(ATLAS); ??? atlas->setString(str->getCString()); } |
| 運行結果:
|
| 當代碼改成如下的時: |
| #include "T10Label.h" #include "AppMacros.h" ? ? CCScene *T10Label::scene() { ??? CCScene * scene = CCScene::create(); ??? T10Label * layer = T10Label::create(); ??? scene->addChild(layer); ??? return scene; } bool T10Label::init() { ??? CCLayer::init(); ??? ??? CCSize size = CCDirector::sharedDirector()->getWinSize(); ??? CCLabelAtlas *atlas = CCLabelAtlas::create("012345678923", "fonts/Labelatlas.png", 31, 60,'0'); ??? atlas->setPosition(ccp(100,100)); ??? atlas->setColor(ccc3(255, 0, 0)); ??? this->addChild(atlas, 1); ? ??? return true; } ? void T10Label::mySchedule(float dt) { ??? static float count = 0; ??? count += dt; ??? CCString * str = CCString::createWithFormat("%d", (int)count); ??? //CCLabelTTF * ttf = (CCLabelTTF *)getChildByTag(TTF); ??? //ttf->setString(str->getCString()); ? ??? CCLabelAtlas * atlas = (CCLabelAtlas*)getChildByTag(ATLAS); ??? atlas->setString(str->getCString()); } |
| 運行結果:
|
?
總結
以上是生活随笔為你收集整理的2.标签CCLabelTTF,CCLabelAtlas,CCLabelBMFont的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.cocos2dx内存管理和CCArr
- 下一篇: 应援打榜是什么意思 其实就是粉丝集资给偶