libgdx學習記錄9——FreeType,ttf中文顯示


前面講到使用Hireo創建的BitmapFont以顯示中文字體。這種方式效率很高,當所要顯示的字的總數較少,並且大小比較固定時,可以采用這種方式。

但是這種也有弊端:

(1)字體大小不能隨意設置,當放大時就會變形。

(2)當所要顯示的字總數較多或者經常變化時,會很麻煩。

libgdx對中文的支持不太好,也是很多人轉向其他引擎的一個原因。幸好,其擴展模塊中的FreeType能夠通過ttf字體來實現隨意中文顯示。

FreeType是libgdx的擴展模塊,創建項目時需要添加對應的jar包和對應的動態運行庫。

core工程lib中加入gdx-freetype.jar。

desktop工程lib中加入gdx-freetype-natives.jar。

android工程中lib加入gdx-freetype.jar,並將armeabi和armeabi-v7a中的libgx-freetype.so文件添加到對應的目錄中。

三個工程中分別將對應的jar包添加到Refrenced Libraries中。

環境配置完成,具體事例如下:

 1 package com.fxb.freetype;
 2 
 3 import com.badlogic.gdx.ApplicationListener;
 4 import com.badlogic.gdx.Gdx;
 5 import com.badlogic.gdx.graphics.Color;
 6 import com.badlogic.gdx.graphics.GL10;
 7 import com.badlogic.gdx.graphics.g2d.BitmapFont;
 8 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 9 
10 import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
11 import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData;
12 
13 
14 public class FreeType implements ApplicationListener{
15 
16     BitmapFont[] font;
17     //FreeTypeBitmapFontData fontData;
18     FreeTypeFontGenerator generator;    
19     SpriteBatch batch;
20     
21     @Override
22     public void create() {
23         // TODO Auto-generated method stub
24         batch = new SpriteBatch();
25         font = new BitmapFont[3];
26         Color[] colors = { Color.RED, Color.BLUE, Color.GREEN };
27         for( int i=0; i<3; ++i ){
28             generator = new FreeTypeFontGenerator( Gdx.files.internal( "data/" + (i+1) + ".ttf" ) );
29             font[i] = generator.generateFont( 25, FreeTypeFontGenerator.DEFAULT_CHARS+"今天是個好日子,大家心情都很", false );
30             font[i].setColor( colors[i] );
31             generator.dispose();
32         }
33 
34         //fontData = generator.generateData( 25, FreeTypeFontGenerator.DEFAULT_CHARS+"今天是個好日子,大家心情都很", false );
35     }
36 
37     @Override
38     public void resize(int width, int height) {
39         // TODO Auto-generated method stub
40         
41     }
42 
43     @Override
44     public void render() {
45         // TODO Auto-generated method stub
46         
47         Gdx.gl.glClearColor( 1, 1, 1, 1 );
48         Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT );
49         
50         batch.begin();
51         for( int i=0; i<3; ++i ){
52             font[i].drawMultiLine( batch, "今天是個好日子,\n大家心情都很好\nVery Good! 20140521!!", 120, 100*(3-i) );
53         }
54         batch.end();
55     }
56 
57     @Override
58     public void pause() {
59         // TODO Auto-generated method stub
60         
61     }
62 
63     @Override
64     public void resume() {
65         // TODO Auto-generated method stub
66         
67     }
68 
69     @Override
70     public void dispose() {
71         // TODO Auto-generated method stub
72         batch.dispose();
73     }
74     
75 }

運行效果:

文中用到了3個ttf文件,1.ttf為娃娃體,2.ttf為幼圓,3.ttf為行楷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM