web-dev-qa-db-ja.com

Libgdx / Javaを使用してテキストを描画するにはどうすればよいですか?

私は、Libgdxで簡単な2Dテキストを描画する方法をグーグルで扱うのに多くの問題を抱えています。これが、これまでにまとめたコードです。

_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()呼び出しに絞り込みました。それが取り除かれていれば、すべて正常に機能します(ただし、もちろんテキストはありません)。

28
Asgeir

テキスト描画用に個別のバッチを作成する理由はあまりありません。 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フレームワークでの呼び出し方法、ステージ(およびテキストのTextArea)を使用することをお勧めします、使用方法の例を参照してくださいここでステージ: http://www.toxsickproductions.com/libgdx/libgdx-basics-create-a-simple-menu/

23
Deepscorn

ビットマップフォントを作成したとき、次のようになりました。

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

フォントファイルをダウンロードしてこれを試してください(フォントのダウンロード中に、同じファイルに.fntファイルと.pngファイルが含まれているかどうかを確認してください)

13
alex

複数の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の別のインスタンスを使用します

4
user1708101

.fntファイルを作成するには、LibGDXのWebサイトで提供されるhieroを使用します。

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

フォントを宣言するには:

BitmapFont font;

フォントをロードするには:(createメソッド内)

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

これはスムーズに機能します。

3