android遊戲開發架構libgdx的使用(二十一)—使用TTF字型檔支援中文

來源:互聯網
上載者:User

好久沒有更新這個系列的文章了。今天下午在群上討論libgdx對中文的支援問題。本來Hiero做是最好的,但是LIbgdx的BitmapFont不支援多圖,常用漢字3500個,是在做不到一張圖上。

libgdx很早之前就有ttf的支援了,不過那個時候有點問題。經測試新版本(0.96)完全支援,特地總結出來和大家分享。

TTF字型檔

TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字型檔格式,隨著windows的流行,已經變成最常用的一種字型檔表示方式,應用範圍非常廣。

如果是Windows作業系統,可以從Fonts檔案夾中找到很多字型檔。也可以從網上下載。

我推薦YaHei.Consolas字型檔,看著很爽,反正我的eclipse就是用的這個字型檔。

gdx-setup-ui的使用

從libgdx下載0.96版本,可以看到檔案結構如下:

強烈運行gdx-setup-ui.jar,這一個項目初始化工具。

運行介面如下:

項目名字,包名什麼的按情況填寫。在中間的Required配置中可以直接下載最新的穩定版本和Nightly版本。不過推薦選用本地的附件。

不用解壓,直接選擇zip檔案,它會自動抽取需要的檔案。

我使用的Eclipse,直接Import即可。

我只產生了案頭項目,一般可以把Android和Web的一起產生了。

注意一下,預設的Android項目對應的SDK是15,可以根據需要更改。有時候匯入的項目會有紅色驚嘆號,添加一個assets檔案夾即可。

其中back-libgdx項目是我們的核心,一切邏輯什麼的都在這裡實現。back-libgdx-XXX是對應的啟動而已。

libgdx使用TTF字型檔

準備一個TTF字型檔改名為font.ttf複製到assets檔案夾。從壓縮包中找到gdx-stb-truetype-natives.jar和gdx-stb-truetype.jar。其中gdx-stb-truetype-natives.jar添加到案頭項目,gdx-stb-truetype.jar添加到核心項目中去。

現在來看看最關鍵的方法TrueTypeFontFactory.createBitmapFont。

我們通過它建立一個支援ttf字型檔的BitmapFont出來。它需要一個FileHandle和要支援的文字。當然還有一些參數,具體意義可以參考API文檔。

也就是說我們需要使用TTF字型檔的哪些文字必須聲明出來。不過問題也不到,3500常用漢字基本可以滿足要求。網上還有一個常用500字,不過那個完全不夠用。

我這裡隨便寫幾個作為示範。

public static final String FONT_CHARACTERS = "世界人民愛好的美好中文支援再看看";

然後使用初始化

font = TrueTypeFontFactory.createBitmapFont(Gdx.files.internal("font.ttf"), FONT_CHARACTERS, 12.5f, 7.5f,1.0f, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

剩下的工作和使用Hiero一樣的了。

public class App implements ApplicationListener {BitmapFont font;SpriteBatch batch;public static final String FONT_CHARACTERS = "世界人民愛好的美好中文支援再看看";@Overridepublic void create() {font = TrueTypeFontFactory.createBitmapFont(Gdx.files.internal("font.ttf"), FONT_CHARACTERS, 12.5f, 7.5f,1.0f, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());font.setColor(1f, 0f, 0f, 1f);batch = new SpriteBatch();}@Overridepublic void dispose() {font.dispose();}@Overridepublic void render() {Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);batch.begin();font.draw(batch, "中文支援", 10, 10);batch.end();}@Overridepublic void resize(int width, int height) {}@Overridepublic void pause() {}@Overridepublic void resume() {}}

效果如下:

在Stage中使用TTF字型檔原理是一樣,需要修改的只有BitmapFont的執行個體化方法。

寫在最後

使用TTF字型檔解決libgdx顯示中文無疑是一種很好的選擇,基本不存在顯示不出文字的情況。但是TTF字型檔的大小一般都比較大,比如我使用的字型檔是13.8M..小一點的也有3M。

對於Android應用這個大小有時候還是難以接受的。

android系統內建的字型檔位於/system/fonts/中,可以使用絕對路徑訪問...不過不推薦就是了。

使用Herio是一個高效(程式效率,不是開發效率)的方法,但是libgdx不支援Herio的多圖。

有文檔提到了使用SpriteSheetPacker,但是我一直沒有找到。google code的代碼自從遷移到Github之後就沒有了,不知道是移除了還是怎麼的了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.