Tengo problemas para mostrar el texto en mi juego al mismo tamaño en diferentes pantallas, e hice una prueba simple.
Esta prueba consiste en mostrar un ajuste de texto en la pantalla, quiero que el texto tenga el mismo tamaño independientemente de la pantalla y del DPI.
He encontrado esto y esta respuesta que creo que debería resolver mi problema, pero no lo hago. En el escritorio, el tamaño está bien, pero en mi teléfono es demasiado grande.
Este es el resultado en mi Nexus 4: (768x1280, densidad 2.0)
Y este es el resultado en mi MacBook: (480x800, densidad 0.6875)
Estoy usando Open Sans Condensed (enlace a fuentes de google)
Como puede ver en el escritorio se ve bien, pero en el teléfono es muy grande.
Aquí el código de mi prueba:
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();
}
}
Estoy tratando de encontrar una forma ordenada de arreglar esto. ¿Qué estoy haciendo mal? es la camara la ventana gráfica?
ACTUALIZAR:
Lo que quiero es mantener los mismos márgenes en proporción, independientemente del tamaño o la resolución de la pantalla. Esta imagen ilustra lo que quiero decir.
Respuestas:
Parece que desea mantener la misma relación de tamaño de texto / tamaño de pantalla. Básicamente, lo que haces es desarrollar en una resolución y dejar que sea escala 1.0. Luego divide el nuevo ancho de pantalla por el ancho anterior y ese es su factor de escala.
Por ejemplo. Desarrollado en 2560x1440 con tamaño de fuente 16 y ejecutándose en 1920x1080.
El tamaño de fuente será: 1920 * 16/2560 = 12
Hago lo mismo en mi biblioteca de interfaz y funciona perfectamente.
fuente
No haga nada, solo configure la escala de la fuente y funcionará para todo tipo de dispositivo
fuente