【Android LibGDX游戏引擎开发教程】第07期:中文字体的显示和绘制(上)
? ? ?在字體的顯示和繪制中,Libgdx的作者(Mario Zechner,美國人)給我們提供了一個非常好用的工具
——Hiero,那么下面就來看看它具體的使用方法。
一、Hiero工具的使用
1、Hiero工具的下載地址
2、下載結束后,雙擊hiero.jar文件打開,我們可以看到Hiero的一些基本功能,相比來說作者做的還是比較簡單易
懂的。從界面上知道,它包括很多選項,可以制作特效、改變背景顏色、設置內間距等等,右側還有作提供給我們
的做好的字體效果點擊“Add”按鈕就可以添加。如下圖所示,將它的功能簡單的標注了下,這里就不詳細介紹了,
有興趣的同學可以自己去摸索一下。
注意 :在“引入ttf格式字體文件”這一欄中,點擊按鈕,可以引入我們自己下載的一些更優美的字體,但是博主試
了幾種字體,在輸入文字的時候發現有些個別的文字顯示不出來,這里需要注意一下,不過問題也不大,在下一篇文
章中,我們還會使用到另外一種方法來教大家實現我們自己想要的ttf格式的字體。
3、編輯好你要寫的文字后,點擊菜單欄“File”選項,然后選中“Save as BMFont Files”,生成兩個文件,如下
圖所示:
將它們拷貝到assets文件夾下,如下圖所示:
注意:如果你要使用的字,只能是.fnt文件里面存在的文字,否則是顯示不出來的。比如,我文件里面有“我是一條尋水的魚”幾個字,那么我可以在程序輸出的時候寫出這幾個字,但是我要是想輸出“天氣晴朗”這4個字,因為編輯文件里面沒有這幾個字,所以就顯示不出來。
4、可能有的讀者會問為什么要加載fnt文件?.fnt文件是做什么用的呢?
? ?
? ?這里簡單解釋一下:由于Libgdx底層是用OpenGL實現的,所以Libgdx是可以支持中文的。但是libgdx中的漢字都
是通過貼圖的方式顯示的,我們用記事本打開myfont.fnt文件,里面顯示的部分內容(如下圖),同時對照.png圖片
來參考下,可以很明顯的看出,libgdx的文字繪制是根據fnt文件獲取對應文字的在png中的坐標位置,然后截取圖片
的相應部分進行繪制。
二 、BitmapFont類
1、BitmapFont介紹
該類存放在com.badlogic.gdx.graphics.g2d包下,繼承自Object,實現了Disposable接口。
2、BitmapFont用途
渲染靜態文本,同時可以設置文字的顏色和大小等等。
三、實現效果圖
文字的單行顯示
文字的多行顯示
?
?
四、詳細代碼編寫
1、單行文字的顯示代碼
?
package com.example.mylibgdxfont;import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch;public class MyGame implements ApplicationListener {private SpriteBatch batch;private BitmapFont font;@Overridepublic void create() {font = new BitmapFont(Gdx.files.internal("myfont.fnt"),Gdx.files.internal("myfont.png"), false); // font.setColor(0.5f, 0.4f, 0.6f, 1);// 設置顏色 // font.setScale(1.5f);// 字體比例大小batch = new SpriteBatch();}@Overridepublic void dispose() {batch.dispose();font.dispose();}@Overridepublic void render() {Gdx.gl.glClearColor(1, 1, 1, 1);Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);batch.begin();font.draw(batch, "我是一條尋水的魚", 100, 460);batch.end();}@Overridepublic void resize(int width, int height) {}@Overridepublic void pause() {}@Overridepublic void resume() {} }?
?
?
文字的單行顯示很簡單,使用font.draw()就可以。draw(SpriteBatch?spriteBatch,java.lang.CharSequence?str,float?x,?float?y,?int?start,?int?end)?
第一個參數是SpriteBatch類的對象;
第二個參數是字符串,也你要輸出的中文字符,例如剛才我們寫的“我是一條尋水的魚”這個就是第二個對應的字符;
第三個和第四個參數(即float?x, float?y), 它們是繪制字中文字符的起點坐標,遵循笛卡爾坐標系;
第五個參數和第六個參數,是設置從第幾個字符開始輸出,到第幾個字符結束,比如我們要輸出“尋水的魚”這4個字就將start改為4,end改為7,這里面 第一個字符默認編碼是0而不是1,請牢記。
?
2、多行文字的顯示代碼
?
package com.example.mylibgdxfont02;import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch;public class MyGame implements ApplicationListener {private SpriteBatch batch;private BitmapFont font;@Overridepublic void create() {font = new BitmapFont(Gdx.files.internal("myfont.fnt"),Gdx.files.internal("myfont.png"), false);// font.setColor(0.5f,0.4f,0.6f,1);//設置顏色// font.setScale(1.0f);//字體比例大小batch = new SpriteBatch();}@Overridepublic void dispose() {batch.dispose();font.dispose();}@Overridepublic void render() {Gdx.gl.glClearColor(1, 1, 1, 1);Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);batch.begin();font.draw(batch, "——我是一條尋水的魚", 100, 460);font.drawMultiLine(batch, "晚風把榮華吹散\n名利是如此淺薄", 0, 0.8f * Gdx.graphics.getHeight());batch.end();}@Overridepublic void resize(int width, int height) {}@Overridepublic void pause() {}@Overridepublic void resume() {} }?
?
BitmapFont類中有一個drawMultiLine()方法幫我們解決了多行顯示的問題,我們只需要在中文字符中加入換行符(\n)即可,而且它還是自動識別的,非常簡單。
?
方法:drawMultiLine(SpriteBatch?spriteBatch,?java.lang.CharSequence?str,?float?x,?float?y,?float?alignmentWidth,BitmapFont.HAlignment?alignment)
這里面前幾個參數我都詳細介紹過了,最后面2個 “float?alignmentWidth,BitmapFont.HAlignment? alignment”? 是指文字的對齊方式,有LEFT、RIGHT、CENTER幾種方式。其中, LEFT的繪制原點是左上角、 RIGHT的繪制原點是右上角、 CENTER的繪制原點是每行文字中心,向兩邊展開。
float?alignmentWidth,,對LEFT不起作用,只對RIGHT和CENTER起作用,對RIGHT來說就相當于把繪制原點平移alignmentWidth的寬度,對CENTER來說相當于平移繪制原點平移alignmentWidth/2的寬度。
好的,這一期的內容到這里就要結束了,在下一篇文章中,我們會使用另一種方法來實現字體的顯示和繪制。有 什么問題,大家可以在評論下方留言。
源碼下載地址
?
?
轉載于:https://www.cnblogs.com/jiangu66/p/3157117.html
總結
以上是生活随笔為你收集整理的【Android LibGDX游戏引擎开发教程】第07期:中文字体的显示和绘制(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 菜单工具栏wxPython菜单与工具栏基
- 下一篇: Commons IO方便读写文件的工具类