Partage
  • Partager sur Facebook
  • Partager sur Twitter

[libgdx] probleme de position après le "rezise"

    4 février 2016 à 23:25:39

    Bonjour,

    j'utilise la libgdx et jusqu’à maintenant je fais pas vraiment gaffe à l'adaptation par rapport à l'écran.
    J'ai implémenté une "FitViewPort" et lu plusieurs tuto et j'ai enfin quelque chose qui fonctionne,
    mais les positions ne sont pas bonne.

    Par exemple, j'ai mis 2 Sprite a une position égale à a la taille de la fenêtre
    mais il ne sont pas afficher la où ils devraient être.

    Je crois ( si j'ai bien compris) que mon problème a un rapport avec la camera, mais je ne sais pas ce que je dois faire.

    voici un screen:

    Voici le code:

    package com.dranac.feedthebloops.Screens;
    
    import com.badlogic.gdx.Gdx;
    import com.badlogic.gdx.Screen;
    import com.badlogic.gdx.audio.Music;
    import com.badlogic.gdx.graphics.GL20;
    import com.badlogic.gdx.graphics.OrthographicCamera;
    import com.badlogic.gdx.graphics.Texture;
    import com.badlogic.gdx.graphics.g2d.Sprite;
    import com.badlogic.gdx.scenes.scene2d.InputEvent;
    import com.badlogic.gdx.scenes.scene2d.Stage;
    import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
    import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
    import com.badlogic.gdx.scenes.scene2d.utils.SpriteDrawable;
    import com.badlogic.gdx.utils.viewport.FitViewport;
    import com.badlogic.gdx.utils.viewport.Viewport;
    import com.dranac.feedthebloops.Entity.Ennemy;
    import com.dranac.feedthebloops.Event.Event;
    import com.dranac.feedthebloops.GUI.Animate;
    import com.dranac.feedthebloops.GUI.CenteredSprite;
    import com.dranac.feedthebloops.MyGame;
    import com.dranac.feedthebloops.Utility.MyClock;
    
    import java.util.ArrayList;
    
    /**
     * Created by Robin on 27/10/2015.
     */
    
    public class TitleScreen implements Screen {
        final private MyGame game;
        private OrthographicCamera gameCam;
        private Viewport gameView;
        private Stage stage;
    
        private Texture tBackground = new Texture("BG_purple2.png");
        private Sprite background = new Sprite(tBackground);
    
    
        private Sprite background2 = new Sprite(tBackground);
    
        private Texture tTitle = new Texture("titre_smoth2.png");
        private Sprite title = new CenteredSprite(tTitle);
    
        private Texture tdoctor = new Texture("doctor.png");
        private Sprite doctor = new CenteredSprite(tdoctor);
    
        private Texture[] skins = new Texture[3];
        private Sprite DecorP;
    
        private ImageButton buttonPlay;
        private ImageButton buttonoption;
        private ImageButton buttonNP;
        private ImageButton buttoncredit;
        private ImageButton buttonquit;
        private ImageButton buttonhelp;
        private ImageButton buttonhard;
        private ImageButton buttonnormal;
    
    
        private ArrayList<Ennemy> fullEnnemy = new ArrayList<Ennemy>();
        private MyClock clock = new MyClock();
        private MyClock refresh = new MyClock();
        private MyClock clockBg = new MyClock();
        private boolean menu = false;
        private boolean menu_level = false;
        private boolean menu_option = false;
        private boolean menu_credit = false;
        private boolean menu_quit = false;
        private boolean menu_help = false;
        private boolean menu_hard = false;
        private boolean menu_normal = false;
    
        private boolean first = true;
        private int form = 0;
        private double speed = 150;
        private Animate wall = new Animate("wall1.png", "wall2.png", 1);
        public Music music;
    
    
        public TitleScreen(final MyGame game)
        {
            this.game = game;
            gameCam = new OrthographicCamera(-Gdx.graphics.getDesktopDisplayMode().width / 2, -Gdx.graphics.getDesktopDisplayMode().height / 2);
            gameCam.setToOrtho(true);
            gameView = new FitViewport(1920, 1080, gameCam);
            stage = new Stage(gameView, game.batch);
            Gdx.input.setInputProcessor(stage);
    
            music = Gdx.audio.newMusic(Gdx.files.internal("Lexurus - Riptide.mp3"));
            music.setLooping(true);
    
            buttonPlay = new ImageButton(new SpriteDrawable(new CenteredSprite(new Texture("play_blue.png"))));
            buttonNP = new ImageButton(new SpriteDrawable(new CenteredSprite(new Texture("new_game.png"))));
            buttonoption = new ImageButton(new SpriteDrawable(new CenteredSprite(new Texture("icone_option.png"))));
            buttoncredit = new ImageButton(new SpriteDrawable(new CenteredSprite(new Texture("Button_credit.png"))));
            buttonquit = new ImageButton(new SpriteDrawable(new CenteredSprite(new Texture("quit-en.png"))));
            buttonhelp = new ImageButton(new SpriteDrawable(new CenteredSprite(new Texture("help.png"))));
            buttonhard = new ImageButton(new SpriteDrawable(new CenteredSprite(new Texture("hard.png"))));
            buttonnormal = new ImageButton(new SpriteDrawable(new CenteredSprite(new Texture("normal.png"))));
    
            buttonPlay.setPosition(350, Gdx.graphics.getDesktopDisplayMode().height / 2);
            buttonNP.setPosition(350, Gdx.graphics.getDesktopDisplayMode().height / 2 - 300);
            buttonoption.setPosition(0,Gdx.graphics.getDesktopDisplayMode().height);
            buttoncredit.setPosition(350, Gdx.graphics.getDesktopDisplayMode().height / 2);
            buttonquit.setPosition(350, Gdx.graphics.getDesktopDisplayMode().height / 2 + 150);
            buttonhelp.setPosition(350, Gdx.graphics.getDesktopDisplayMode().height / 2 + 300);
            buttonhard.setPosition(350, Gdx.graphics.getDesktopDisplayMode().height / 2 - 150);
            buttonnormal.setPosition(350, Gdx.graphics.getDesktopDisplayMode().height / 2 - 300);
    
    
            skins[0] = new Texture("play_blue.png");
            skins[1] = new Texture("play_red.png");
            skins[2] = new Texture("play_green.png");
    
            DecorP = new CenteredSprite(skins[0]);
    
            background.setPosition(0, 0);
            background.setFlip(false, true);
    
            background2.setPosition(0, -1080);
            background2.setFlip(false, true);
    
            title.setPosition((Gdx.graphics.getDesktopDisplayMode().width / 2), title.getHeight() / 2);
            title.setFlip(false, true);
    
            DecorP.setPosition(Gdx.graphics.getDesktopDisplayMode().width / 2, Gdx.graphics.getDesktopDisplayMode().height / 2);
            DecorP.setFlip(false, true);
    
            for (int i = 0; i < 5; i++) {
                fullEnnemy.add(new Ennemy());
            }
    
            doctor.setPosition(Gdx.graphics.getDesktopDisplayMode().width,Gdx.graphics.getDesktopDisplayMode().height);
            doctor.setFlip(false, true);
    
            stage.addActor(buttonPlay);
            stage.addActor(buttonNP);
            stage.addActor(buttonoption);
            stage.addActor(buttoncredit);
            stage.addActor(buttonquit);
            stage.addActor(buttonhelp);
            stage.addActor(buttonhard);
            stage.addActor(buttonnormal);
    
            stage.getActors().get(1).setVisible(false);
            stage.getActors().get(2).setVisible(false);
            stage.getActors().get(3).setVisible(false);
            stage.getActors().get(4).setVisible(false);
            stage.getActors().get(5).setVisible(false);
            stage.getActors().get(6).setVisible(false);
            stage.getActors().get(7).setVisible(false);
    
        }
    
        @Override
        public void show() {
    
    
        }
    
        @Override
        public void render(float delta) {
    
            stage.act(delta);
            Gdx.gl.glClearColor(0, 0, 0, 1);
            Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
            game.batch.setProjectionMatrix(stage.getCamera().combined);
    
            Event.escape();
    
            if (first)
            {
                music.play();
            }
    
            background.setPosition(0, background.getY() + (float) clockBg.getTime() * (float) speed);
            background2.setPosition(0, background2.getY() + (float) clockBg.getTime() * (float) speed);
    
            clockBg.start();
    
            if (background.getY() >= Gdx.graphics.getDesktopDisplayMode().height) {
                background.setPosition(0, background2.getY() - Gdx.graphics.getDesktopDisplayMode().height);
    
            }
            if (background2.getY() >= Gdx.graphics.getDesktopDisplayMode().height) {
                background2.setPosition(0, background.getY() - Gdx.graphics.getDesktopDisplayMode().height);
    
            }
    
          /*  if (refresh.getTime() >= 1.5) {
                if (form == 0) {
                    form++;
                    stage.getActors().get(1).addAction(new Action() {
                        @Override
                        public boolean act(float delta) {
                            return false;
                        }
                    });
                    jouer.getSprite().setBounds(jouer.getSprite().getX(), jouer.getSprite().getY(), skins[0].getWidth(), skins[0].getHeight());
                    refresh.start();
                } else if (form == 1) {
                    form++;
                    jouer.getSprite().setTexture(skins[1]);
                    jouer.getSprite().setBounds(jouer.getSprite().getX(), jouer.getSprite().getY(), skins[1].getWidth(), skins[1].getHeight());
                    refresh.start();
                } else if (form == 2) {
                    form = 0;
                    jouer.getSprite().setTexture(skins[2]);
                    jouer.getSprite().setBounds(jouer.getSprite().getX(), jouer.getSprite().getY(), skins[2].getWidth(), skins[2].getHeight());
                    refresh.start();
                }
            }*/
    
            for (int i = 0; i < fullEnnemy.size(); i++)
            {
                fullEnnemy.get(i).move(clock.getTime());
            }
    
            buttonPlay.addListener(new ClickListener()
            {
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("Down");
                    return true;
                }
    
                public void touchUp(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("up");
                    menu = true;
    
                }
            });
    
            buttonNP.addListener(new ClickListener() {
    
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("Down");
                    return true;
                }
    
                public void touchUp(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("up");
                    menu_level = true;
    
                }
            });
            buttonoption.addListener(new ClickListener() {
    
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("Down");
                    return true;
                }
    
                public void touchUp(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("up");
                    menu_option = true;
                }
            });
            buttoncredit.addListener(new ClickListener() {
    
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("Down");
                    return true;
                }
    
                public void touchUp(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("up");
                    menu_credit = true;
    
                }
            });
            buttonquit.addListener(new ClickListener()
            {
    
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("Down");
                    return true;
                }
    
                public void touchUp(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("up");
                    menu_quit = true;
    
    
                }
            });
            buttonhelp.addListener(new ClickListener()
            {
    
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("Down");
                    return true;
                }
    
                public void touchUp(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("up");
                    menu_help = true;
    
    
                }
            });
            buttonhard.addListener(new ClickListener()
            {
    
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("Down");
                    return true;
                }
    
                public void touchUp(InputEvent event, float x, float y, int pointer, int button)
                {
                    menu_hard = true;
                }
            });
    
            buttonnormal.addListener(new ClickListener()
            {
    
                public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("Down");
                    return true;
                }
    
                public void touchUp(InputEvent event, float x, float y, int pointer, int button)
                {
                    System.out.println("up");
                    menu_normal = true;
                }
            });
    
            if (menu)
            {
                stage.getActors().get(0).setVisible(false);
                stage.getActors().get(1).setVisible(true);
                stage.getActors().get(2).setVisible(true);
                stage.getActors().get(3).setVisible(true);
                stage.getActors().get(4).setVisible(true);
                stage.getActors().get(5).setVisible(true);
    
            }
            if (menu_level)
            {
                stage.getActors().get(1).setVisible(false);
                stage.getActors().get(2).setVisible(false);
                stage.getActors().get(3).setVisible(false);
                stage.getActors().get(4).setVisible(false);
                stage.getActors().get(5).setVisible(false);
                stage.getActors().get(6).setVisible(true);
                stage.getActors().get(7).setVisible(true);
            }
            if (menu_credit)
            {
                game.setScreen(new CreditScreen(game, false, true));
            }
            if (menu_help)
            {
                game.setScreen(new TutoScreen(game, false, true));
            }
            if (menu_quit)
            {
                Gdx.app.exit();
            }
            if (menu_hard)
            {
                game.setScreen(new PlayScreen(game, true));
            }
            if (menu_normal)
            {
                game.setScreen(new PlayScreen(game, false));
            }
    
            game.batch.begin();
            background.draw(game.batch);
            background2.draw(game.batch);
                    for (int i = 0; i < fullEnnemy.size(); i++) {
                fullEnnemy.get(i).draw(game.batch);
            }
            wall.draw(game.batch);
            doctor.draw(game.batch);
            title.draw(game.batch);
            game.batch.end();
            stage.draw();
        }
    
        @Override
        public void resize(int width, int height) {
    
            stage.getViewport().update(width,height);
        }
    
        @Override
        public void pause() {
            music.pause();
    
        }
    
        @Override
        public void resume() {
            music.play();
        }
    
        @Override
        public void hide() {
    
        }
    
        @Override
        public void dispose() {
            stage.dispose();
            music.dispose();
            tBackground.dispose();
            skins[0].dispose();
            skins[1].dispose();
            skins[2].dispose();
            tTitle.dispose();
            game.batch.dispose();
        }
    
    
    }
    

    Dites moi si vous avez des pistes ,ect ^^"

    Merci d'avance




    MrShivers 

    -
    Edité par Mrshivers 5 février 2016 à 12:04:27

    • Partager sur Facebook
    • Partager sur Twitter

    [libgdx] probleme de position après le "rezise"

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown