2012-09-17 42 views
26

我一直有很多麻烦谷歌搜索如何使用Libgdx绘制简单的2D文本。下面是我已经放在一起的代码:如何使用Libgdx/Java绘制文本?

SpriteBatch spriteBatch; 
BitmapFont font; 
CharSequence str = "Hello World!"; 
spriteBatch = new SpriteBatch(); 
font = new BitmapFont(); 

spriteBatch.begin(); 
font.draw(spriteBatch, str, 10, 10); 
spriteBatch.end(); 

该代码确实绘制了Hello World字符串,但是,它弄乱了我所有其他的绘图。他们在那里,只残酷地肢解,移动等等。我已经试过Gdx.gl11.glPushMatrix()Gdx.gl11.glPopMatrix()围绕几乎每个语句的子集。

我已经缩小了残破的图纸到font.draw()的电话,如果这被取出,一切工作正常(但当然没有文字)。

回答

12

当我创建的位图字体是这样的:

font = new BitmapFont(Gdx.files.internal("Calibri.fnt"),Gdx.files.internal("Calibri.png"),false); 

通过下载一些字体文件(在下载的字体,请检查是否.FNT文件和.png文件,包括相同)试试这个

+0

@Asgeir不要忘记接受答案,如果你发现它有帮助 – alex

+4

它没有区别。使用'新BitmapFont()'实例化将使用默认的嵌入字体。 –

+1

单独的BitmapFont不会呈现。 BitmapFont是它呈现文本的配置。批处理使用BitmapFont和字符串(要绘制的文本)绘制文本 – Zoe

2

尝试调用多个batch.begin()和batch.end():

CharSequence str = "Hello World!"; 
spriteBatch = new SpriteBatch(); 
font = new BitmapFont(); 

spriteBatch.begin(); 
font.draw(spriteBatch, str, 10, 10); 
spriteBatch.end(); 
spriteBatch.begin(); 
//draw your other sprites here 
spriteBatch.draw(...); 
spriteBatch.end(); 

或只使用SpriteBatch

的不同实例
+0

这不起作用。 –

2

要创建.fnt文件,请使用LibGDX网站提供的hiero。

设置字体大小150,它会创建一个.fnt文件和一个.png文件。复制资产文件夹中的两个文件。

要声明的字体:

BitmapFont font; 

要加载字体:(在创建方法)

font = new BitmapFont(Gdx.files.internal("data/rayanfont.fnt"), false); 
//rayanfont is the font name 

要渲染:

batch.begin(); 
font.setScale(.2f); 
font.draw(batch, "hello", x,y); 
batch.end(); 

这将顺利工作。

+0

难道你不是指'setScale'? – Cilan

19

我没有看到为文本绘制创建单独批次的很多原因。使用gdxVersion =“1.4.1”(与Android Studio中建立的gradle),该代码绘制文本成功:

BitmapFont font = new BitmapFont(); //or use alex answer to use custom font 

public void render(float dt) 
    { 
    batch.setProjectionMatrix(camera.combined); //or your matrix to draw GAME WORLD, not UI 

    batch.begin(); 

    //draw background, objects, etc. 
    for(View view: views) 
    { 
     view.draw(batch, dt); 
    } 

    font.draw(batch, "Hello World!", 10, 10); 

    batch.end(); 
    } 

注意,在这里你画在游戏世界中的坐标,所以如果你的角色移动(在一些成熟的,对例如),文本也会移动。如果你想看到文本,它会被固定在屏幕上,比如Label/TextField,或者它在不同的UI框架中被调用,比我推荐使用Stage(和TextArea作为文本),例如参见如何使用舞台在这里:http://www.toxsickproductions.com/libgdx/libgdx-basics-create-a-simple-menu/

相关问题