libGdx 怎麼用中文字
由於 libgdx 沒有原生支援中文,所以在做hana 引擎的時候花了滿多時間在處理顯示中文字這塊。
但是網路上大家做法又都不一樣,剛好我發現我字型的部分忘記處理全形標點符號,所以順便做個教學啦。
那我們開始吧~~~~~
Hiero
由於 libgdx 無法直接使用 windows 的字形,所以我們需要一個工具幫忙打包。
先到這個連結去下載工具: https://github.com/libgdx/libgdx/wiki/Hiero
如果找不到的話仔細看一下Running Hiero章節,應該找的到的。
下載完成之後用命令提示字元下 java -jar [剛剛下載的檔名]
應該會看到下面的東西:
先簡單介紹一下畫面內的東西,我們主要會用到的是 Font 跟 Simple Text 還有 Rendering 區塊。
- Font:用來選擇字型或匯入字型的區塊
- Sample Text 用來放入你會需要用到的文字,要注意的是如果沒有把要用到的字放進去的話在 Libgdx 裡面會顯示不出來
- Rendering 是一個預覽的地方。
了解這些東西之後呢,我們先繼續準備其他食材。
下載免費且可商用的字形
相信在開啟 Hiero 就會看到微軟正黑體等字體吧。要注意這些字體有的需要商業授權才可以使用,簡單來說如果今天用那些字體發遊戲出去的話有可能會被要求授權金之類的。
所以最簡單的方式就是找一些免費可商用的字形。
這邊示範的部分會用 google 的 Noto Sans 字體。
當然也可以用其他字體。
接下來先把字體下載下來後放在剛剛下載的 Hiero 旁邊吧。
(記得解壓縮喔)
取得幾乎全部的中文字(非必要)
剛剛提到:
沒有把要用到的字放進去的話在 Libgdx 裡面會顯示不出來
此時可能會有人想要一口氣把所有中文字都導入,這樣就可以一勞永逸了。
但又不可能自己把所有中文都打出來該怎麼辦呢?
這個我也找滿久的,後來在"教育部 成果網" 發現有提供4808個常用字。而且還提供 ods 下載,我看到的時候都感動到快哭了,第一次這麼感謝國家的網路資源。
那個網站的網址在這裡: https://language.moe.gov.tw/result.aspx?classify_sn=23&subclassify_sn=437&content_sn=46
點開前往結果後的跳出的 pdf 檔中點ods檔就可以下載了。
打開下載下來後的檔案把所有中文複製下來,自己想辦法把換行的部分都去掉就準備好第二項食材了。
產生字型檔
接下來把文字複製到複製到 Hiero 的 sample Text,複製之後別急著離開,把常用到的標點符號也打上去吧。
再來在 Font 區塊點 File 選擇剛剛下載的字型檔吧。以剛剛的範例來看的話是NotoSansTC-Black.otf檔。
下面是都處理好的圖:
再來選擇 File -> Save as BMFont Files 就會生出一堆圖檔跟一個 fnt 檔。
最後要怎麼在 libgdx 使用,這點相當簡單。我們先直接看程式碼
private SpriteBatch batch;
private BitmapFont bitmapFont;
@Override
public void create() {
batch = new SpriteBatch();
bitmapFont = new BitmapFont(new FileHandle(new File(
PathUtils.generateFontPath("NotoSansTC-Black.fnt"))), false); //讀取檔案,也可以用Gdx.files.internal去讀檔案
bitmapFont.setColor(Color.WHITE); //設定字體顏色
bitmapFont.getData().setScale(2); //字體大小比例
}
@Override
public void render() {
//do some logic
bitmapFont.draw(batch, "Hello world", 100, 250); //寫字上去啦,100是x的位置,250是 y 的位置
}
這樣一來就大功告成啦。
最後祝大家遊戲開發順利~~~
小小的注意事項
如果在使用的過程中出現一個框框打叉叉,代表那個字沒辦法從字型檔裡面找到,那就只好再補一下囉。
留言
張貼留言