0

Je fais un jeu pour android en utilisant libgdx et je veux que le jeu semble bien (avec la même proportion) sur différents écrans de smartphones, mais pas de réalisation. Dans un appareil, l'image semble normale et une autre est très petite. J'ai utilisé viewports et OrthographicCamera mais je ne vois pas de bons résultats. Peut-être que ce que je fais mal.Garder le ratio d'aspect dans libGDX

Actuellement, j'ai ce code (extrait):

public class PlayScreen extends BaseScreen { 

    private Stage stage; 
    private FaceActor faceActor64; 
    private Texture faceTexture64; 

    private int sw; 
    private int sh; 

    public PlayScreen(MainGame game) { 
     super(game); 
     faceTexture64 = new Texture("images/all64.png"); 
    } 

    @Override 
    public void show() { 
     sw = Gdx.app.getGraphics().getWidth(); 
     sh = Gdx.app.getGraphics().getHeight(); 

     stage = new Stage(new FitViewport(sw, sh)); 

     faceActor64 = new FaceActor(faceTexture64); 
     faceActor64.setBounds(150, 150, 64, 64); 
     stage.addActor(faceActor64); 

     Gdx.input.setInputProcessor(stage); 

    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(0,0,0,1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     stage.act(delta); 
     stage.draw(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     stage.getViewport().update(width, height, true); 
    } 

    @Override 
    public void hide() { 
     stage.dispose(); 
    } 

    @Override 
    public void dispose() { 
     faceTexture64.dispose(); 
    } 
} 

J'utilise une image de 64px.

Result in a smartphone of 480x800.

Result in a smartphone of 1080x1920.

Toute idée comment résoudre ce problème?

Répondre

1

Ce que vous faites il y a ceci:

Pour un appareil 720x1280 vous configurez la vue de votre monde du jeu à 720x1280 et pour un dispositif à 1080x19201080x1920 vous définissez. Vos ressources ne changent probablement pas en taille, donc plus un appareil a de pixels, plus il montrera de votre monde de jeu. Je dis toujours aux gens d'oublier les pixels, à moins qu'ils ne veuillent un pixel parfait et c'est ce que vous créez si vous ne redimensionnez pas vos actifs, un monde de jeu parfait.

Si vous y pensez, votre jeu n'a même pas besoin de connaître l'appareil. Il a juste besoin de savoir combien de votre monde de jeu à rendre dans ce FitViewport. Alors disons que j'ai un jeu de tuiles et mes tuiles ont une taille de 1x1unités. Si je veux montrer 16 carreaux verticalement et 9 horizontalement, je voudrais configurer mon FitViewport comme new FitViewport(9, 16). Cela remplirait l'écran sur la plupart des appareils, car ils ont souvent un rapport d'aspect de 16:9.

+0

Merci beaucoup! J'ai été résolu;) –

0

L'explication courte est, passez seulement des constantes dans le constructeur de Viewport, pas les dimensions d'écran réelles. Choisissez les dimensions avec lesquelles vous voulez travailler, et la fenêtre les étirera pour s'adapter à l'écran actuel.

Si vous ne voulez pas de barres noires ("letterboxing/pillarboxing"), utilisez ExtendViewport au lieu de FitViewport.

+0

Merci d'avoir répondu :) –

+0

Mais 'ExtendViewport'" étend "le monde du jeu sur les appareils avec un rapport d'aspect différent. Oui, vous vous débarrassez des barres noires, mais pour donner exactement la même expérience de jeu sur chaque appareil dont vous avez besoin 'FitViewport'. – Madmenyo

+0

@MennoGouw Connaissez-vous des jeux réussis qui ont des barres noires? Je pense que les utilisateurs sont très ennuyés quand ils voient qu'un jeu ne profite pas de leur joli grand écran sur un téléphone coûteux. Il y a plusieurs façons de rendre le jeu assez similaire. Dans un défilement latéral, déplacez l'appareil photo de sorte qu'il y ait la même distance de jeu mondiale devant le personnage sur tous les appareils. Dans la plupart des autres jeux, dessinez simplement des paysages supplémentaires dans l'espace supplémentaire. – Tenfour04