android下libgdx 中文字符显示初探

最近开始学习libgdx这个开源的游戏框架,使用bitmapfont有很多缺陷,还要自己动手制作,通过查看代码发现libgdx带了freetype,所以应该是能通过使用中文字体来显示中文字符, 下面是具体使用的代码,有不正确的地方还请多多指正。


package com.GreenLemonMobile.achellies;

import android.opengl.GLES10;
import android.os.Bundle;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.AudioDevice;
import com.badlogic.gdx.audio.io.VorbisDecoder;
import com.badlogic.gdx.audio.transform.SoundTouch;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.Jpeg;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData;
import com.badlogic.gdx.math.Vector2;

public class HelloWorld extends AndroidApplication implements ApplicationListener {
    
    private FreeTypeFontGenerator freetypeGenerator;
    private Texture backgroundTexture;
    private SpriteBatch spriteBatch;
    private Vector2 textPosition = new Vector2(100, 100);
    private Vector2 textDirection = new Vector2(1, 1);
    private BitmapFont freetypeBitmapFont;
    private BitmapFont defaultBitmapFont;
    private Pixmap jpegPixmap;
    private Texture jpegTexture;
    
    /** the file to playback **/
    private static final String FILE = "data/bg.ogg";
    /** a VorbisDecoder to read PCM data from the ogg file **/
    VorbisDecoder decoder;
    /** an AudioDevice for playing back the PCM data **/
    AudioDevice device;
    /** SoundTouch instance to modify the PCM data **/
    SoundTouch soundTouch;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        initialize(this, false);
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void create() {
        freetypeGenerator = new FreeTypeFontGenerator(Gdx.files.internal("data/STXINGKA.TTF"));   
        FreeTypeBitmapFontData fontData = freetypeGenerator.generateData(48, FreeTypeFontGenerator.DEFAULT_CHARS + "开源游戏引擎", false);
        freetypeGenerator.dispose();    
        freetypeBitmapFont = new BitmapFont(fontData, fontData.getTextureRegion(), false);  
        
        backgroundTexture = new Texture(Gdx.files.internal("data/badlogic.jpg"));
        spriteBatch = new SpriteBatch();
        jpegPixmap = Jpeg.read(Gdx.files.internal("data/badlogic.jpg"));
        jpegTexture = new Texture(jpegPixmap);
        defaultBitmapFont = new BitmapFont();
        
        freetypeBitmapFont.setColor(Color.RED);
        defaultBitmapFont.setColor(Color.BLUE);
    }

    @Override
    public void dispose() {
        backgroundTexture.dispose();
        spriteBatch.dispose();
        jpegPixmap.dispose();
        jpegTexture.dispose();
    }

    @Override
    public void pause() {
    }

    @Override
    public void render() {
        int centerX = Gdx.graphics.getWidth() / 2;
        int centerY = Gdx.graphics.getHeight() / 2;
        
        Gdx.gl10.glClear(GLES10.GL_COLOR_BUFFER_BIT);  

        textPosition.x += textDirection.x * Gdx.graphics.getDeltaTime() * 60;
        textPosition.y += textDirection.y * Gdx.graphics.getDeltaTime() * 60;
        
        if (textPosition.x < 0) {
            textPosition.x = 0;
            textDirection.x = -textDirection.x; 
        }
        
        if (textPosition.x > Gdx.graphics.getWidth()) {
            textPosition.x = Gdx.graphics.getWidth();
            textDirection.x = -textDirection.x;
        }
        
        if (textPosition.y < 0) {
            textPosition.y = 0;
            textDirection.y = -textDirection.y; 
        }
        
        if (textPosition.y > Gdx.graphics.getHeight()) {
            textPosition.y = Gdx.graphics.getHeight();
            textDirection.y = -textDirection.y;
        }
        
        spriteBatch.begin();
        spriteBatch.draw(backgroundTexture, centerX - backgroundTexture.getWidth() / 2,
                centerY - backgroundTexture.getHeight() / 2,  0, 0, backgroundTexture.getWidth(), backgroundTexture.getHeight());
        spriteBatch.draw(jpegTexture, 0, 0);
        spriteBatch.draw(jpegTexture, Gdx.graphics.getWidth() - jpegTexture.getWidth(), Gdx.graphics.getHeight() - jpegTexture.getHeight());
        spriteBatch.draw(jpegTexture, 0, Gdx.graphics.getHeight() - jpegTexture.getHeight());
        spriteBatch.draw(jpegTexture, Gdx.graphics.getWidth() - jpegTexture.getWidth(), 0);
        
        freetypeBitmapFont.draw(spriteBatch, "hello libgdx 开源游戏引擎", textPosition.x, textPosition.y);
        spriteBatch.end();
    }

    @Override
    public void resize(int arg0, int arg1) {
        spriteBatch.getProjectionMatrix().setToOrtho2D(0, 0, arg0, arg1);
    }

    @Override
    public void resume() {
    }

}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值