Oyunumda farklı ekranlarda aynı boyutta metin göstermek için sorun yaşıyorum ve basit bir test yaptım.
Bu test, ekrana uyan bir metin göstermeyi içerir, metnin ekrandan ve DPI'dan bağımsız olarak aynı boyutta olmasını istiyorum.
Bulduğum bu ve bu cevap benim sorunu çözmek gerektiğini düşünüyorum ama bilmediğimiz. Masaüstünde boyut tamam, ancak telefonumda çok büyük.
Bu benim Nexus 4'ümün sonucu: (768x1280, 2.0 yoğunluk)
Ve bu MacBook'umun sonucu: (480x800, 0.6875 yoğunluk)
Ben kullanıyorum (fontları google linki) Open Sans özet
Masaüstünde gördüğünüz gibi iyi görünüyor, ancak telefonda çok büyük.
İşte benim test kodu:
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();
}
}
Bunu düzeltmek için temiz bir yol bulmaya çalışıyorum. Neyi yanlış yapıyorum? kamera görünüm?
GÜNCELLEME:
İstediğim ekran boyutundan veya çözünürlükten bağımsız olarak aynı kenar boşluklarını orantılı tutmak. Bu görüntü ne demek istediğimi göstermektedir.