J'ai des problèmes pour afficher du texte sur mon jeu à la même taille sur différents écrans, et j'ai fait un test simple.
Ce test consiste à montrer un texte ajusté à l'écran, je veux que le texte ait la même taille indépendamment de l'écran et du DPI.
J'ai trouvé ceci et cette réponse qui, je pense, devraient résoudre mon problème, mais ne le font pas. Dans le bureau, la taille est correcte, mais dans mon téléphone est trop grand.
Voici le résultat sur mon Nexus 4: (768x1280, densité 2.0)
Et voici le résultat sur mon MacBook: (480x800, densité 0,6875)
J'utilise Open Sans Condensed (lien vers les polices google)
Comme vous pouvez le voir sur le bureau, ça a l'air bien, mais le téléphone est si gros.
Voici le code de mon test:
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();
}
}
J'essaie de trouver un bon moyen de résoudre ce problème. Qu'est-ce que je fais mal? est la caméra? la fenêtre?
METTRE À JOUR:
Ce que je veux, c'est garder les mêmes marges en proportion, indépendamment de la taille ou de la résolution de l'écran. Cette image illustre ce que je veux dire.