2012-09-17 4 views
26

私はLibgdxで簡単な2Dテキストを描画する方法を尋ねました。ここで私はこれまで一緒に入れているコードは次のとおりです。コードはHello Worldの文字列を描画し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(); 

、しかし、それはすべて私の他の図面を台無しに。彼らはそこにいて、残酷にしか屠殺されず、動いています。私は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のWebサイトで提供されているhieroを使用します。

フォント150のサイズを設定すると、.fntファイルと.pngファイルが作成されます。両方のファイルをassetsフォルダにコピーします。フォントをロードする

BitmapFont font; 

:(Inがメソッドを作成する)

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

テキスト描画用に別個のバッチを作成する理由はあまりありません。ここにあなたが描くゲーム世界における座標という

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(); 
    } 

注意を、そのために、プラットフォーマーで(自分のキャラクタが移動した場合:(アンドロイドStudioでのGradleで構築された)gdxVersion =「1.4.1」を使用してそのコードが正常にテキストを描画します例)、テキストも移動します。 Stage/TextArea(テキストの場合はTextArea)を使用することをお勧めします。たとえば、Label/TextFieldのようなテキストを別のUIフレームワークで呼び出すと、画面上で固定されます。ここにステージ:http://www.toxsickproductions.com/libgdx/libgdx-basics-create-a-simple-menu/

関連する問題