Ich habe Probleme, Text in meinem Spiel in derselben Größe auf verschiedenen Bildschirmen anzuzeigen, und habe einen einfachen Test durchgeführt.
Dieser Test besteht darin, eine Textanpassung auf dem Bildschirm anzuzeigen. Ich möchte, dass der Text unabhängig vom Bildschirm und von DPI dieselbe Größe hat.
Ich habe diese und jene Antwort gefunden , von der ich denke, dass sie mein Problem lösen sollte, aber nicht. Auf dem Desktop ist die Größe in Ordnung, aber auf meinem Handy ist sie zu groß.
Dies ist das Ergebnis auf meinem Nexus 4: (768 x 1280, Dichte 2,0)
Und das ist das Ergebnis auf meinem MacBook: (480x800, 0,6875 Dichte)
Ich verwende Open Sans Condensed (Link zu Google-Schriftarten)
Wie Sie auf dem Desktop sehen können, sieht es gut aus, aber auf dem Telefon ist es so groß.
Hier der Code meines Tests:
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();
}
}
Ich versuche einen ordentlichen Weg zu finden, um dies zu beheben. Was mache ich falsch? ist die Kamera? das Ansichtsfenster?
AKTUALISIEREN:
Was ich möchte, ist, die gleichen Ränder proportional zu halten, unabhängig von der Bildschirmgröße oder Auflösung. Dieses Bild zeigt, was ich meine.
Antworten:
Sie möchten anscheinend das gleiche Verhältnis von Textgröße zu Bildschirmgröße beibehalten. Grundsätzlich entwickeln Sie mit einer Auflösung und lassen dies Skalierung 1.0 sein. Dann teilen Sie die neue Bildschirmbreite durch die alte Breite und das ist Ihr Skalierungsfaktor.
Zum Beispiel. Entwickelt auf 2560x1440 mit Schriftgröße 16 und läuft auf 1920x1080.
Die Schriftgröße beträgt: 1920 * 16/2560 = 12
Ich mache das gleiche in meiner Schnittstellenbibliothek und es funktioniert perfekt.
quelle
Tun Sie nichts, stellen Sie einfach die Skalierung der Schriftart ein und es funktioniert für alle Arten von Geräten
quelle