Saya mengalami masalah untuk menampilkan teks pada game saya pada ukuran yang sama di layar yang berbeda, dan saya melakukan tes sederhana.
Tes ini terdiri untuk menunjukkan pemasangan teks di layar, saya ingin teks memiliki ukuran yang sama secara independen dari layar dan dari DPI.
Saya telah menemukan ini dan jawaban ini yang menurut saya harus menyelesaikan masalah saya tetapi tidak. Di desktop ukurannya ok, tapi di ponsel saya terlalu besar.
Ini adalah hasil pada Nexus 4 saya: (kepadatan 768x1280, 2.0)
Dan ini adalah hasil di MacBook saya: (480x800, kepadatan 0,6875)
Saya menggunakan Open Sans Condensed (tautan ke font google)
Seperti yang Anda lihat di desktop terlihat bagus, tetapi di ponsel begitu besar.
Berikut kode tes saya:
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();
}
}
Saya mencoba menemukan cara yang rapi untuk memperbaikinya. Apa yang saya lakukan salah? apakah kameranya? viewport?
MEMPERBARUI:
Yang saya inginkan adalah menjaga margin yang sama secara proporsional, terlepas dari ukuran atau resolusi layar. Gambar ini menggambarkan apa yang saya maksud.