11
votes

Différences de système de coordonnées libgdx entre le rendu et l'entrée tactile

J'ai un écran (Basescreen implémente l'interface d'écran) qui rend une image PNG. En cliquant sur l'écran, il déplace le caractère sur la position touchée (à des fins de test).

@Override
public void render(float delta) {
    if (Gdx.input.justTouched()) {
        x = Gdx.input.getX();
        y = Gdx.input.getY();
    }

    super.getGame().batch.draw(_sourceTexture, x, y);
}


0 commentaires

4 Réponses :


17
votes

Détecter la collision J'utilise caméra.unproject (Vector3) . J'ai défini vector3 comme: xxx

maintenant je passe ce vecteur dans caméra.unproject (vector3) . Utilisez x et y de ce vecteur pour dessiner votre personnage.


1 commentaires

Il y a beaucoup de telles questions là-bas et de nombreuses réponses disant que vous devez faire de la caméra.Unproject, mais lorsque je commençais avec Libgdx, je ne savais tout simplement pas quoi faire alors (c'est-à-dire utiliser les nouvelles coordonnées de vecteur). C'est la seule réponse que j'ai trouvée puis que cela spécifie cela, tant de merci beaucoup, bonne réponse!



6
votes

Vous le faites bien. Libgdx fournit généralement des systèmes de coordonnées dans leur format "natif" (dans ce cas, les coordonnées de l'écran tactile natif et les coordonnées par défaut OpenGL). Cela ne crée aucune consistance, mais cela signifie que la bibliothèque ne doit pas nécessairement entrer entre vous et tout le reste. La plupart des jeux OpenGL utilisent une caméra qui correspond à une coordination "du monde" relativement arbitraire sur l'écran, de sorte que les coordonnées du monde / du jeu sont souvent très différentes des coordonnées de l'écran (une cohérence est donc impossible). Voir Modification du système de coordonnées dans Libgdx (Java)

là sont deux façons que vous pouvez travailler autour de cela. On transforme vos coordonnées tactiles. L'autre consiste à utiliser une caméra différente (une projection différente).

à corrige les coordonnées tactiles , il suffit de soustraire le Y de la hauteur de l'écran. C'est un peu de hack. Plus généralement, vous voulez "non -roject" de l'écran dans le monde (voir le caméra.unproject () variations ). C'est probablement le plus facile.

Alternativement, à Fixez la caméra Voir " Modification du système de coordonnées de libgdx (Java) ", ou Cet article sur le forum libgdx . Fondamentalement, vous définissez une caméra personnalisée, puis définissez le spritbatch pour l'utiliser au lieu de la valeur par défaut .: Shaperenderer , les rendriers de la police, etc.) qui seront également par défaut à la caméra "incorrecte" et doivent être réparées.


0 commentaires

4
votes

J'ai eu le même problème, je l'ai simplement fait.

public boolean touchDown(int screenX, int screenY, int pointer, int button) {

    screenY = (int) (gheight - screenY);
    return true;
}


0 commentaires

1
votes

Le lien ci-dessous traite de ce problème.

Projets Les coordonnées données dans l'espace mondial pour sélectionner des coordonnées. P>

Vous devez utiliser la méthode Projet (Vector3 WorldCoords) Code> en classe com.badlogic.gdx.graphics.camera code>. P>

    world.hitPoint((int) worldCoors.x, (int) worldCoors.y);

    OnTouch();

    return true;
}


0 commentaires