58 votes

Changement du système de coordonnées dans LibGDX (Java)

LibGDX a un système de coordonnées où (0,0) se trouve en bas à gauche. (comme cette image : http://i.stack.imgur.com/jVrJ0.png )

Je me frappe la tête contre un mur, principalement parce que je porte un jeu que j'ai déjà fait avec le système de coordonnées habituel (où 0,0 est dans le coin supérieur gauche).

Ma question : Existe-t-il un moyen simple de changer ce système de coordonnées ?

0 votes

Bien sûr, c'est un peu ce que je fais en ce moment. Mais y a-t-il un moyen d'inverser le système de coordonnées ? Quelque chose comme créer une matrice de projection avec le système de coordonnées que je veux. Ou dire au Spritebatch de dessiner selon un certain système de coordonnées... J'ai cherché comme un fou, mais je ne semble pas trouver quelque chose en particulier ... (et si oui, quel est le code réel)

2 votes

C'est en effet un cauchemar. Les choses comme SpriteBatch et sprites vont du bas vers la gauche. Les choses comme input et textureregion partent du haut à gauche. Il en résulte un codage très maladroit et une rotation des choses dans votre esprit si souvent que vos yeux commencent à sortir. Quoi qu'il en soit, je recommande de s'y habituer, tourner autour de la caméra résulte en des images retournées et ensuite vous devez tout retourner, mais pas tout, juste la plupart des choses et les faire dessiner de manière inattendue. LibGDX est génial, mais le système de coordonnées a de sérieux problèmes. Il faut s'y habituer.

0voto

User Points 138

J'ai pu obtenir des textures y Le rendu des polices est correct en utilisant le système de coordonnées inversées suggéré via OrthographicCamera. Voici ce que j'ai fait :

private SpriteBatch batch;
private BitmapFont font;
private OrthographicCamera cam;
private Texture tex;

@Override
public void create () {
    batch = new SpriteBatch();

    font = new BitmapFont(true);
    font.setColor(Color.WHITE);

    cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    cam.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    tex = new Texture("badlogic.jpg");
}

@Override
public void dispose() {
    batch.dispose();
    font.dispose();
    tex.dispose();
}

@Override
public void render () {
    cam.update();
    batch.setProjectionMatrix(cam.combined);

    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();

    font.draw(batch, "Test", 50, 50);
    batch.draw(tex, 100, 100, tex.getWidth(), tex.getHeight(), 0, 0, tex.getWidth(), tex.getHeight(), false, true);

    batch.end();
}

Les points importants à noter sont :

  • Le constructeur de BitmapFont, le booléen renverse la police.
  • Pour batch.draw() vous devez utiliser tous ces paramètres car vous avez besoin d'un booléen flipY à la fin pour retourner la texture (je vais peut-être étendre SpriteBatch ou faire une méthode utilitaire pour éviter de passer autant de paramètres tout le temps).
  • Avis batch.setProjectionMatrix(cam.combined) ; in render()

Maintenant, nous verrons si je suis de retour ici plus tard ce soir pour faire des modifications afin de corriger d'autres problèmes ou découvertes en faisant tout cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X