2012-10-15 40 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