37

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()それが取り除かれれば、すべて正常に動作します (ただし、もちろんテキストはありません)。

4

4 に答える 4

29

テキスト描画用に別のバッチを作成する理由はあまりありません。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/

于 2014-12-21T12:38:57.217 に答える
15

Bitmap フォントを作成すると、次のようになりました。

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

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

于 2012-09-24T10:37:26.017 に答える
6

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

これでスムーズに動作します。

于 2013-12-23T17:42:50.877 に答える
5

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

于 2013-12-23T16:07:34.137 に答える