2012-10-15 41 views
12

我認真地打賭,我做了一些愚蠢的事情,只是似乎無法注意到它。如何在LibGDX中繪製BitmapFont?

package com.me.mygdxgame; 

import com.badlogic.gdx.ApplicationListener; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.GL10; 
import com.badlogic.gdx.graphics.OrthographicCamera; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.Texture.TextureFilter; 
import com.badlogic.gdx.graphics.g2d.BitmapFont; 
import com.badlogic.gdx.graphics.g2d.Sprite; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.graphics.g2d.TextureRegion; 

public class Locked implements ApplicationListener 
{ 
    private OrthographicCamera camera; 
    private SpriteBatch batch; 
    private Texture texture; 
    private Sprite sprite; 
    private BitmapFont font; 
    private CharSequence str = "Hello World!"; 
    private float width; 
    private float height; 

    @Override 
    public void create() 
    { 
     width = Gdx.graphics.getWidth(); 
     height = Gdx.graphics.getHeight(); 

     camera = new OrthographicCamera(1, height/width); 
     batch = new SpriteBatch(); 

     texture = new Texture(Gdx.files.internal("data/libgdx.png")); 
     texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); 

     TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275); 

     sprite = new Sprite(region); 
     sprite.setSize(0.9f, 0.9f * sprite.getHeight()/sprite.getWidth()); 
     sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2); 
     sprite.setPosition(-sprite.getWidth()/2, -sprite.getHeight()/2); 

     font = new BitmapFont(Gdx.files.internal("data/digib.fnt"), 
       Gdx.files.internal("data/digib.png"), false); 
    } 

    @Override 
    public void dispose() 
    { 
     batch.dispose(); 
     texture.dispose(); 
    } 

    @Override 
    public void render() 
    { 
     Gdx.gl.glClearColor(1, 1, 1, 1); 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

     batch.setProjectionMatrix(camera.combined); 
     batch.begin(); 
     font.setColor(0.0f, 0.0f, 0.0f, 1.0f); 

     //sprite.draw(batch); 
     font.draw(batch, str, width*0.5f, height*0.5f); 
     batch.end(); 
    } 

    @Override 
    public void resize(int width, int height) 
    { 
    } 

    @Override 
    public void pause() 
    { 
    } 

    @Override 
    public void resume() 
    { 
    } 
} 

與模板工具生成的項目中,他們提供GDX-設置-ui.jar 正如你可以在代碼中看到的,我沒有刻意去擺脫默認的代碼(只是一些簡單的繪製代碼來渲染LibGDX標誌)。

所以,用乾淨生成的項目,我遵循這個指南這裏 http://code.google.com/p/libgdx-users/wiki/addingText2D

,最後用上面所提供的代碼到達。

問題是,爲什麼不能!@#$ ing文本顯示!?我多次改變了位置,仍然沒有運氣:\

我錯過了什麼嗎?

供參考:字體很好,我把它們放到另一個遊戲,它的工作原理。

回答

8

試圖改變投影矩陣是這樣的:

Matrix4 normalProjection = new Matrix4().setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

batch.setProjectionMatrix(normalProjection); 
7

我所要做的就是

spriteBatch = new SpriteBatch(); 
font = new BitmapFont(Gdx.files.internal("data/nameOfFont.fnt"), 
     Gdx.files.internal("data/nameOfFont.png"), false); 

和渲染方法

spriteBatch.begin(); 
font.setColor(1.0f, 1.0f, 1.0f, 1.0f); 
font.draw(spriteBatch, "some string", 25, 160); 
spriteBatch.end(); 

你可以閱讀更多的東西吧我博客:http://algorhymes.wordpress.com/2012/11/17/javalibgdx-fonts/

1

你是否嘗試像這樣手動給位置。我希望這會工作 batch.setProjectionMatrix(camera.combined); batch.enableBlending(); batch.begin();
font.draw(batch,yourString,100,100);
batch.end();

2

與您的代碼的主要問題是,已創建相機
viewportWidth = 1 &
viewportHeight =寬度/高度

和你在寬度* 0.5F &高度* 0.5F繪圖字體這超出範圍從相機

要麼相機初始化變爲

camera = new OrthographicCamera(width, height); 

.... 或改變平局字體聲明

font.setScale(1,height/width); 
font.draw(batch, str, 0.5f, height/width*0.5f); 
3

創建了使用通過libgdx網站

提供設置字體150的尺寸hiero一個.FNT文件,它會創建一個。FNT文件,並在您的資產產生的文件夾PNG文件的文件

副本都

現在我宣佈,字體

BitmapFont字體;

西北create方法

字體=新BitmapFont(Gdx.files.internal( 「數據/ 100.fnt」),FALSE); // 100是字體的名字,你可以給你的任何字體的名字

in render

font.setscale(.2f);

font.draw(批處理,「你想寫什麼」,x,y);

這將順利工作

5

個人我不能將所有的字體,格式.FNT的忠實粉絲。如果你需要不同的字體大小,你必須花費大量的時間(和應用空間)來完成所有的轉換。

您可以只使用FreeType的擴展,並從.TTF由watis解釋

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile); 
BitmapFont font15 = generator.generateFont(15); 
BitmapFont font22 = generator.generateFont(22); 
generator.dispose(); 

更多信息here

渲染以同樣的方式進行直接荷載。

+0

我不能使用generator.generateFont(int);因爲它不存在。你只能通過FreeTypeFontParameter – Eames

+0

這裏有一個使用FreeTypeFontGenerator的教程> https://libgdx.info/basic-label/ – Julien