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.
Jawaban:
Anda tampaknya ingin mempertahankan rasio ukuran teks / screensize yang sama. Pada dasarnya apa yang Anda lakukan adalah mengembangkan pada satu resolusi dan biarkan itu menjadi skala 1.0. Kemudian Anda membagi lebar layar baru dengan lebar lama dan itu adalah faktor skala Anda.
Sebagai contoh. Berkembang pada 2560x1440 dengan ukuran font 16 dan berjalan pada 1920x1080.
Ukuran font adalah: 1920 * 16/2560 = 12
Saya melakukan hal yang sama di perpustakaan antarmuka saya dan berfungsi dengan baik.
sumber
Jangan lakukan apa-apa, hanya mengatur skala font dan itu akan berfungsi untuk semua jenis perangkat
sumber