2017-05-28 5 views
0

Je suis un peu confus. J'utilise libgdx pour la première fois et j'ai des problèmes avec les systèmes de coordonnées. Quand je crée une texture et que vous souhaitez définir la position, je fais:libgdx: Autre système de coordonnées lors de l'utilisation de textures

texture = new Texture("myGraphic.png", 0, 0); 

et ma photo sera placé dans le coin inférieur gauche.

Mais lorsque je tente d'obtenir la position de contact avec:

if(Gdx.input.isTouched()) 
    { 
     Vector3 tmp = new Vector3(Gdx.input.getX(),Gdx.input.getY(),0); 
     System.out.println("Coord:" + " + " + tmp.x + " + " + tmp.y); 
    } 

Je reconnais que (0,0) se trouve dans le coin supérieur gauche. J'ai donc essayé camera.unproject (tmp) avant ma sortie, mais alors je n'obtiendra que des valeurs entre -1 et 1. Comment obtenir le même système de coordonnées pour tous les éléments?

+0

montrez votre code comment vous utilisez l'appareil photo? – Aryan

Répondre

0

Dans le système de coordonnées Libgdx au toucher est y-down mais pour l'écran ou l'image c'est y-up.

Jetez un oeil de LibGDX Coordinate systems

Si peut utiliser l'appareil photo, réglez l'axe y pointant vers le haut par camera.setToOrtho(false); et obtenir le point du monde par la méthode camera.unproject(vector3);.

public class TouchSystem extends ApplicationAdapter { 

    SpriteBatch batch; 
    Texture texture; 
    Vector3 vector3; 
    OrthographicCamera camera; 

    @Override 
    public void create() { 

     batch=new SpriteBatch(); 
     texture=new Texture("badlogic.jpg"); 
     vector3=new Vector3(); 
     camera=new OrthographicCamera(); 
     camera.setToOrtho(false); // this will set screen resolution as viewport 
    } 

    @Override 
    public void render() { 

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

     batch.begin(); 
     batch.draw(texture,0,0); 
     batch.end(); 

     if(Gdx.input.justTouched()) { 

      vector3.set(Gdx.input.getX(),Gdx.input.getY(),0); 
      camera.unproject(vector3); 
      System.out.println("Coord:" + " + " + vector3.x + " + " + vector3.y); 
     } 
    } 

    @Override 
    public void dispose() { 
     texture.dispose(); 
     batch.dispose(); 
    } 
} 
+0

Ça marche! Merci beaucoup. Une autre petite question: Dois-je utiliser la même caméra de ma classe MainGame ou puis-je créer une nouvelle caméra dans une autre classe (par exemple un nouvel écran)? –

+0

appareil photo n'est pas un objet lourd afin que vous puissiez créer des caméras différentes sur un autre écran. – Aryan