日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android LibGDX游戏引擎开发教程】第07期:中文字体的显示和绘制(上)

發布時間:2024/8/23 Android 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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期:中文字体的显示和绘制(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。