Cocos2d-X中的字型,Cocos2d-X字型

來源:互聯網
上載者:User

Cocos2d-X中的字型,Cocos2d-X字型

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;}

執行結果:


cocos2dx開發,CCLabelTTF在使用過程中,怎改變字型,我怎發現字型不可以改變,我主要是用來輸出數字

windows支援不是很好,在老一點的整合顯卡並不支援opengl1.5以上的版本,在手機上字型是有效果的,你可以自己弄個黑蘋果虛擬機器試一下
 
cocos2d-x 獲得文字寬度

getContentSize().width
getContentSize().height
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.