天天看點

Cocos2d-x 周邊工具 之 BMFont

轉載請注明出處:

http://blog.csdn.net/lttree

—————————————————————————————————————

要開始找實習了= =。

現在在複習C++與算法,整理整理項目,做做履歷…

好久沒有更新部落格,有些懶了,要改啊,(⊙v⊙)嗯….

現在準備做一個專欄系列——Cocos2d-x的周邊工具,

其實,不僅僅是cocos2d-x,很多其他引擎也都可以用的,

而且之前也寫過一些類似的,比如BMFont 和 texturepacker的,但是都是比較籠統,這次從頭到尾,好好整理一下。

本系列文章将包括 字型、圖檔壓縮存儲(紋理圖檔)、音樂音效、粒子特效、瓦片等等方面

PS:由于我用的是Windows系統,是以介紹的工具都是Windows的..

這是第一篇,關于字型da~

正文:

我們做遊戲的時候,會用到很多文字,有動态的、有靜态的,

靜态文字 就簡單一些(對我們程式員來說…),完全可以由美工來做張圖檔,又美觀、又大方、又好、又不費我們啥事~

動态文字 就需要程式來控制,什麼時候顯示什麼,比如 遊戲中的金币、分數、時間等,這些需要變化的

靜态文字的制作,這裡就不說了(其實是不會o(╯□╰)o)

動态文字 的制作,工具篇嘛,當然要說說工具啦,當啷啷啷~界面渣渣,但是功能弓雖大的——BMFont(文章末尾會給下載下傳位址)

Cocos2d-x 周邊工具 之 BMFont

多麼低調奢華有内涵的圖示啊~

Cocos2d-x 周邊工具 之 BMFont

一看風格,就是VC6.0那個年代的…~o(╯□╰)o~

雖然這樣,但是無法掩蓋它強大之處——迅捷、高效、免費!

BMFont的基本使用

看這個主界面,左上角兩個菜單項——選擇 與 編輯;

左面一個個小方塊格子是一些常見字元,選擇你想要生成的字元,它們會高亮顯示,最後導出的檔案所包含的字元就是高亮顯示的那些(當然,還有後面我們添加的一些);

右面那一行行的是 左面字元的歸屬,比如 拉丁文、希臘文 等等,當你左面選擇高亮的時候,右面相應歸屬前面的選項也要勾選上,否則沒有用喲~;

接下來看菜單項——選擇

Cocos2d-x 周邊工具 之 BMFont

ok,先來看看第一個 Font setting(字型設定)

Cocos2d-x 周邊工具 之 BMFont

再看一下第二個 Export Options(導出設定)

Cocos2d-x 周邊工具 之 BMFont

然後是第二個菜單項——編輯

Cocos2d-x 周邊工具 之 BMFont

大部分東東都注釋了一下,還有不懂得,可以度娘or谷哥~

現在,我們可以選擇一些字元來做字型了,

步驟:

1.選擇一些你想用的字元:點選右面你所需要的 所屬前面的方塊(選中),然後在左面選擇你需要用的,高亮顯示。(這個步驟,可以用 編輯選項 來輔助一下)

2.在字型設定界面來設定一下關于字型的部分:比如要生成的字型是什麼樣的,字型大小,抗鋸齒 等等

3.在 導出設定界面來設定導出相關細節

4.導出

BMFont 漢字的添加

我們已經大體會使用BMFont了,現在來加入一些漢字。

首先,我們将我們想加入的漢子錄入到一個txt中,存儲這個txt為 UTF-8格式(非常重要哦)。

然後,打開BMFont,字型設定的 字型找個裡面有中文的(微軟雅黑啥的),字元編碼設定為 Unicode。

接着,打開編輯菜單項,找到 Select chars from file,然後找到之前存漢字的txt檔案,點選打開,就行了。

現在,可以在 字型設定 的 Visualize中預覽一下,就可以看到我們在txt中寫的漢字了。

最後,生成一下就可以了。

做一個 表 的小Demo

說了這麼多,不如來一個小Demo試試效果。

這個Demo就做個小時鐘,格式是:

時間: xx分-xx秒

1.在TXT中輸入時間、分、秒;在BMFont中找到 數字、符号、英文。

2.友善起見,我什麼都沒設定,直接導出,生成 一個.fnt 和 一個.png檔案,把這兩個檔案,放到cocos2d-x資源目錄下的fonts檔案夾下。

3.因為顯示中文比較麻煩,是以,我采用的是類似于android的string.xml方式,先在fonts檔案夾下建立一個 chinese.xml ,裡面存儲相應的 key 與 漢字。然後,在程式中通過Dictionary調用key,來把相應的漢字提取出來,再根據 fnt,查找位置,顯示在螢幕中。(直接輸出漢字,就是顯示不出來,找了很多方法都沒用,是以暫時用這個方法,如果有更好的方法,歡迎留言,指點一下。)

chinese.xml 内容:

<dict>  
    <key>TIME</key>  
    <string>時間</string>  
    <key>MIN</key>  
    <string>分</string>
    <key>SEC</key>
    <string>秒</string>
</dict>  
           

用Dictionary擷取Key值内容:

Dictionary *strings = Dictionary::createWithContentsOfFile("fonts/chinese.xml");  
    //讀取鍵中的值 objectForKey根據key,擷取對應的string  
    const char *tr_time = ((CCString*)strings->objectForKey("TIME"))->getCString();  
    const char *tr_min = ((CCString*)strings->objectForKey("MIN"))->getCString();  
    const char *tr_sec = ((CCString*)strings->objectForKey("SEC"))->getCString();  
           

4.在Cocos2d-x中,有專門的标簽——LabelBMFont,它的速度比LabelTTF快很多而且LabelBMFont中的每個字元寬度是可變的。

LabelBMFont繼承自 Node、LabelProtocol、BlendProtocol類,是以它不僅具有Node的基本特性還實作了LabelProtocol接口(就是setString方法和getString方法)。

建立 LabelBMFont對象,來顯示:

auto timeHZ = LabelBMFont::create(tr_time+StringUtils::format(": %d",min)+tr_min+StringUtils::format("-%d",sec)+tr_sec,"fonts/fontDemo.fnt"); 
    timeHZ->setTag();
    timeHZ->setPosition(Vec2(visibleSize.width/,visibleSize.height/));
    this->addChild(timeHZ);
           

5.設定更新函數,一秒更新一次,60秒進1分等細節:

void BMFontDemo::clockRun(float ft)
{
    if( sec >=  ) {
        if( min >=  ) {
            min = ;
        }
        else
        {
            min++;
        }
        sec = ;
    }
    else
    {
        sec++;
    }


    //利用CCDictionary來讀取xml  
    Dictionary *strings = Dictionary::createWithContentsOfFile("fonts/chinese.xml");  
    //讀取鍵中的值 objectForKey根據key,擷取對應的string  
    const char *tr_time = ((CCString*)strings->objectForKey("TIME"))->getCString();  
    const char *tr_min = ((CCString*)strings->objectForKey("MIN"))->getCString();  
    const char *tr_sec = ((CCString*)strings->objectForKey("SEC"))->getCString();  

    auto label = (LabelBMFont*)this->getChildByTag();
    label->setString( tr_time + StringUtils::format(": %d",min) + tr_min + StringUtils::format("-%d",sec) + tr_sec );
}
           

6.運作一下,小鐘表就顯示出來了

Cocos2d-x 周邊工具 之 BMFont

我對BMFont的小小了解

我覺得這個BMFont就是,把你系統字庫或者自己下載下傳字庫中的一些文字,重新打包成一個 fnt 和 png,然後用的時候,從fnt中擷取坐标,直接截取png相應位置,顯示出來。

說到這,是不是很熟悉呢?沒錯,就是 plist和png組合。

是以,這其實也是與Sprite有些相關的,LabelBMFont設定的文字,無法設定字型大小(其實,在BMFont 字型設定時已經設定了),如果想在cocos2d-x中改變大小,用的方法是 scale(縮放),是以,顯示出來的字已經算是圖檔了~

而且,我們簡單生成了fnt和png以後,你還可以用 PS 對png修改一下,改改顔色啊,什麼的,隻要不動位置。

OK,這篇文章就到這裡了,下一篇是關于 TexturePacker 的。

(第一次用MarkDown寫文章,好别扭啊,繼續适應适應吧 ~ 。~ )

最後~

轉載請注明出處:

http://blog.csdn.net/lttree