フォントサイズをlibgdxの画面解像度に一致させる問題


10

ゲームのテキストを同じサイズで別の画面に表示するのに問題があり、簡単なテストを行いました。

このテストは、画面にテキストフィッティングを表示することで構成されています。画面やDPIから独立して、テキストのサイズが同じである必要があります。

私はこれこの答えを見つけましたが、私の問題は解決するはずですが、解決しません。デスクトップではサイズは大丈夫ですが、私の電話では大きすぎます。

これは私のNexus 4での結果です(768x1280、2.0密度)

Nexus 4の密度計算

そして、これは私のMacBookの結果です:(480x800、0.6875密度)

ここに画像の説明を入力してください

Open Sans Condensedを使用しています(Googleフォントへのリンク)

ご覧のとおり、デスクトップは見栄えが良いですが、電話ではとても大きいです。

ここに私のテストのコード:

public class TextTest extends ApplicationAdapter
{
    private static final String TAG = TextTest.class.getName();
    private static final String TEXT = "Tap the screen to start";

    private OrthographicCamera camera;
    private Viewport viewport;

    private SpriteBatch batch;
    private BitmapFont font;

    @Override
    public void create ()
    {
        Gdx.app.log(TAG, "Screen size: "+Gdx.graphics.getWidth()+"x"+Gdx.graphics.getHeight());
        Gdx.app.log(TAG, "Density: "+Gdx.graphics.getDensity());

        camera = new OrthographicCamera();
        viewport = new ExtendViewport(Gdx.graphics.getWidth(), Gdx.graphics.getWidth(), camera);
        batch = new SpriteBatch();

        FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/OpenSans-CondLight.ttf"));
        font = createFont(generator, 64);
        generator.dispose();
    }

    private BitmapFont createFont(FreeTypeFontGenerator generator, float dp)
    {
        FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();

        int fontSize = (int)(dp * Gdx.graphics.getDensity());
        parameter.size = fontSize;

        Gdx.app.log(TAG, "Font size: "+fontSize+"px");

        return generator.generateFont(parameter);
    }

    @Override
    public void render ()
    {
        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        int w = -(int)(font.getBounds(TEXT).width / 2);

        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        font.setColor(Color.BLACK);
        font.draw(batch, TEXT, w, 0);
        batch.end();
    }

    @Override
    public void resize(int width, int height)
    {
        viewport.update(width, height);
    }

    @Override
    public void dispose()
    {
        font.dispose();
        batch.dispose();
    }
}

私はこれを修正するためのきちんとした方法を見つけようとしています。私は何を間違っていますか?カメラですか?ビューポート?

更新:

私が欲しいのは、画面サイズや解像度に関係なく、同じマージンを一定に保つことです。この画像は私が何を意味するかを示しています。

ここに画像の説明を入力してください


物理的なサイズを同じにしたいですか(コンピューターでは2cmのテキスト==モバイルでは2cm tekt)、またはテキストをディスプレイに合わせますか?
Eejin、2014年

ここで何を求めているのか、完全にはわかりません。あなたが投稿したリンクはこの質問に答えるようです。ディスプレイのサイズとDPIに注意する必要があります。正しく答えられるように、質問を詳しく説明してください。
Katu

私はそれを試してみます。私が欲しいのは、異なる画面サイズや解像度でも同じ割合のテキストを維持することです。つまり、映画の画面では、明らかにcm単位でサイズが大きくなりますが、比率は同じマージンになります。つまり、@ Eejinが言ったこととまったく同じではありません。私は自分の意味を示す画像で投稿を更新しました。
イニャキベドヤ2014年

回答:


15

あなたは同じtextsize / screensizeの比率を保ちたいようです。基本的には、1つの解像度で開発し、それをスケール1.0にします。次に、新しい画面の幅を古い幅で割ります。これがスケール係数です。

例えば。フォントサイズ16の2560x1440で開発し、1920x1080で実行します。

フォントサイズは1920 * 16/2560 = 12

私は自分のインターフェイスライブラリでも同じことを行い、完全に機能します。


@Eejinに感謝します。これは私が必要としていたものであり、完全に機能します。次に、私がリンクした答えは同じ実サイズを示すためのものですか?
イニャキベドヤ2014年

また、デバイスのスケーリングについても説明します。しかし、ここでは、フォントは利用可能な解像度に対して大きくなり、フォントはdpiに依存しています。28インチの2560x1440モニターと5インチの1920x1080スマートフォンではdpiが異なります。必要なメソッドは常に特定の部分を埋め、DPI対応のメソッドはフォントサイズを変更して読みやすくし、作業スペースが増える可能性があることに注意してください。
Eejin、2014

THX!機能した!!
ParampalP 2014

2
@kevinksmithこれは整数除算を行っているためであり、「Androidの一部のバージョン」が計算を正しく行っていないためではありません。
MichaelHouse

1
@ AshrafSayied-Ahmadテキストを画面幅のピクセルの特定の割合にする必要がある場合、DPIは重要ではありません。
Eejin、2015

2

フォントのスケールを設定するだけで何もしないでください。フォントはすべてのタイプのデバイスで機能します

 font.setScale( .9f,.9f);

これを回答のコードに追加して、このソリューションを配置するのに最適な場所のコンテキストを提供してください。これにより、将来のユーザーが回答をすばやく理解できるようになります。
トム「ブルー」ピドック14

彼のコードのようにビットマップフォントを作成する場所でこの行を使用するだけです。彼はfont = createFont(generator、64);と記述してビットマップフォントを作成しました。したがって、font.setScale(.9f、.9f);という行を記述します。その下
Sudhir sing 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.