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
[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.