web-dev-qa-db-ja.com

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-setup-ui.jarコードでわかるように、私はわざわざ取得する必要はありませんでしたデフォルトのコードを取り除きます(LibGDXロゴをレンダリングするためのいくつかの単純な描画コード)。

だから、きれいに生成されたプロジェクトで、私はここでこのガイドに従いました http://code.google.com/p/libgdx-users/wiki/addingText2D

そして最後に、上記の提供されたコードで到着します。

問題は、なぜ!@#$ ingテキストが表示されないのかということです!?私は何度も位置を変えましたが、それでも運がありません:\

私は何か見落としてますか?

FYI:フォントは問題ありません。別のゲームにドロップすると、機能します。

13
ains

次のように射影行列を変更してみてください。

Matrix4 normalProjection = new Matrix4().setToOrtho2D(0, 0, Gdx.graphics.getWidth(),  Gdx.graphics.getHeight());

batch.setProjectionMatrix(normalProjection);
8
watis

私がするのは

    spriteBatch = new SpriteBatch();
 font = new BitmapFont(Gdx.files.internal("data/nameOfFont.fnt"),
         Gdx.files.internal("data/nameOfFont.png"), false);

とrenderメソッドで

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/

9
AlgoRhymes

個人的には、すべてのフォントを.fnt形式に変換することはあまり好きではありません。特定のフォントに異なるサイズが必要な場合は、すべての変換を行うために多くの時間(およびアプリスペース)を費やす必要があります。

FreeType拡張機能を使用して、.ttfから直接ロードできます。

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);
BitmapFont font15 = generator.generateFont(15);
BitmapFont font22 = generator.generateFont(22);
generator.dispose();

詳細 ここ

レンダリングは、watisが説明したのと同じ方法で行われます。

5
sheitan

libgdxWebサイトで提供されているhieroを使用して.fntファイルを作成します

フォント150のサイズを設定すると、.fntファイルとpngファイルが作成されます

assestsフォルダー内の両方のファイルをコピーします

フォントを宣言します

BitmapFontフォント;

createメソッドのnw

font = new BitmapFont(Gdx.files.internal( "data/100.fnt")、false); // 100は、フォントに任意の名前を付けることができるフォント名です。

レンダリングで

font.setscale(.2f);

font.draw(batch、 "書きたいものは何でも"、x、y);

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

3

コードの主な問題は、でカメラを作成したことです
viewportWidth = 1&
viewportHeight =幅/高さ

カメラの範囲外の幅* 0.5fと高さ* 0.5fでフォントを描画しています

カメラの初期化を次のように変更します

camera = new OrthographicCamera(width, height);

....またはdrawfontステートメントをに変更します

font.setScale(1,height/width);
font.draw(batch, str, 0.5f, height/width*0.5f);
2
Vikalp Jain

このように手動でポジションを与えてみましたか?これがbatch.setProjectionMatrix(camera.combined);で機能することを願っています。 batch.enableBlending(); batch.begin();
font.draw(batch、yourString、100,100);
batch.end();

1
Nishant Anindya