2011-05-13 5 views
4

Comment puis-je prendre en charge (faire un algorithme) pour libgdx pour soutenir la résolution de l'écran multiple? J'ai fait mon travail sur l'application HTC Tattoo en utilisant si statments avec des paramètres tels que:Android libgdx résolution grand écran

if (Gdx.input.getX()==40) { 

Qu'est-ce qu'un bon algorithme pour faire ce travail sur des écrans plus grands? J'ai essayé, mais sans aucun résultat:

publis static int translatex() { 
    float p = (float)Gdx.graphics.getHeight()*340; 
    return (int) p*Gdx.input.getX(); 
} 

340 est la base x (la résolution x sur mon téléphone) utilisé par moi sur le HTC Tattoo. Alors ..... comment puis-je faire une fonction pour soutenir les grands écrans avec des valeurs absolues. Je ne veux pas changer les if-statements.

Répondre

14

C'est assez facile. Vous construisez essentiellement l'ensemble de votre programme pour votre résolution native, mais dans tout ce qui concerne le dimensionnement de positionnement et de texture ont quelque chose comme ceci:

private void resize() 
{ 
    float x = Gdx.graphics.getWidth(); 
    float y = Gdx.graphics.getHeight(); 

    float changeX = x/assumeX; //being your screen size that you're developing with 
    float changeY = y/assumeY; 

    position = new Vector2(position.x * changeX, position.y * changeY); 
    width = startWidth * changeX; 
    height = startHeight * changeY; 
    bounds = new Vector2 (position.x, (Gdx.graphics.getHeight() - position.y) - height); 

} 

Fondamentalement, ce que vous faites prend chaque objet généré et l'exécuter à travers quelque chose cela augmente/diminue en fonction de la modification des valeurs x/y dans votre résolution. Plus il est loin de l'indigène, plus il sera grand. Lorsque la vérification de quelque chose est quelque part ou quelque chose quelque part, toujours le code comme votre résolution souhaitée, mais exécutez-le à travers une fonction de redimensionnement avant de l'afficher ou de le laisser interagir avec le reste de votre programme.

+0

Pour un exemple de cette implémentation, référez-vous à mon tutoriel StringBuild sur le wiki libgdx. – Remm

+0

Qu'est-ce que startWidth? Et la fonction de redimensionnement ont 2 paramètres int largeur, int hauteur, que startWidth est la largeur? – Felix

+0

début largeur/hauteur sera la taille de votre texture nativement avant le redimensionnement. la nouvelle largeur et la hauteur sont les augmentations par rapport au changeX et changeY. Bounds est simplement un vecteur2 qui maintient la position du coin opposé afin que vous puissiez facilement connaître les limites de l'objet. Objet d'appel à créer -> obtenir toutes les valeurs initiales telles que la position, la largeur, la hauteur -> les convertir avec la fonction resize() -> dessiner la texture sur l'écran. Nous gardons startHeight et la hauteur séparés dans un cas d'utilisation de textureRegions, quand vous avez besoin de connaître la taille de base de la texture afin que vous puissiez l'étirer correctement – Remm

3

Voir une solution plus élégante au http://www.java-gaming.org/index.php?topic=25685.0 (voir aussi le commentaire de Nate à cette solution). De plus, si vous utilisez scene2d, notez que cette méthode (libgdx 0.9.6) stage.setViewport devrait avoir cette fonctionnalité, mais elle ne se comporte pas vraiment comme on pourrait s'y attendre.

Mise à jour: setViewPort a été corrigé, donc cela fonctionne comme prévu.

Questions connexes