轉載請注明出處:
http://blog.csdn.net/lttree
—————————————————————————————————————
要開始找實習了= =。
現在在複習C++與算法,整理整理項目,做做履歷…
好久沒有更新部落格,有些懶了,要改啊,(⊙v⊙)嗯….
現在準備做一個專欄系列——Cocos2d-x的周邊工具,
其實,不僅僅是cocos2d-x,很多其他引擎也都可以用的,
而且之前也寫過一些類似的,比如BMFont 和 texturepacker的,但是都是比較籠統,這次從頭到尾,好好整理一下。
本系列文章将包括 字型、圖檔壓縮存儲(紋理圖檔)、音樂音效、粒子特效、瓦片等等方面
PS:由于我用的是Windows系統,是以介紹的工具都是Windows的..
這是第一篇,關于字型da~
正文:
我們做遊戲的時候,會用到很多文字,有動态的、有靜态的,
靜态文字 就簡單一些(對我們程式員來說…),完全可以由美工來做張圖檔,又美觀、又大方、又好、又不費我們啥事~
動态文字 就需要程式來控制,什麼時候顯示什麼,比如 遊戲中的金币、分數、時間等,這些需要變化的
靜态文字的制作,這裡就不說了(其實是不會o(╯□╰)o)
動态文字 的制作,工具篇嘛,當然要說說工具啦,當啷啷啷~界面渣渣,但是功能弓雖大的——BMFont(文章末尾會給下載下傳位址)
多麼低調奢華有内涵的圖示啊~
一看風格,就是VC6.0那個年代的…~o(╯□╰)o~
雖然這樣,但是無法掩蓋它強大之處——迅捷、高效、免費!
BMFont的基本使用
看這個主界面,左上角兩個菜單項——選擇 與 編輯;
左面一個個小方塊格子是一些常見字元,選擇你想要生成的字元,它們會高亮顯示,最後導出的檔案所包含的字元就是高亮顯示的那些(當然,還有後面我們添加的一些);
右面那一行行的是 左面字元的歸屬,比如 拉丁文、希臘文 等等,當你左面選擇高亮的時候,右面相應歸屬前面的選項也要勾選上,否則沒有用喲~;
接下來看菜單項——選擇
ok,先來看看第一個 Font setting(字型設定)
再看一下第二個 Export Options(導出設定)
然後是第二個菜單項——編輯
大部分東東都注釋了一下,還有不懂得,可以度娘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.運作一下,小鐘表就顯示出來了
我對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