IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Libgdx : Gestion de la position d'un personnage


Sujet :

avec Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Libgdx : Gestion de la position d'un personnage
    Bonjour à tous,

    Alors voila mon problème, je suis actuellement en train de tester libgdx et pour m'aider je regarde certains tutos dont celui-ci : http://blogue.nbourre.profweb.ca/?p=519

    Donc j'ai décidé de reprendre beaucoup son code afin de voir comment on peut arriver à un résultat rapidement sauf que finalement cela n'est pas aussi simple... A l'écran mon personnage (qui n'est d'autre qu'un cube blanc) n'avance pas, donc j'ai fait quelques testes avec des messages dans la console afin de voir la position en x et y de mon personnage dans un 1er temps dans la classe Personnage et ensuite dans ma classe de rendu et la je vois que dans ma classe Personnage le mouvement est bien pris en compte mais pas dans ma classe de rendu qui lui reste tout le temps à la même position. Pourtant le personnage est tout le temps appelé à partir d'une même instance.

    Voila en gros mon problème en espèrent ne pas me tromper d'endroit pour poster.

    Merci d'avance si vous voyez le problème

    Un peu de code :

    EcranJeu.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    public class EcranJeu implements Screen, InputProcessor {
     
    	private Monde monde;
    	private MondeRendu rendu;
    	private MondeControle controleur;
     
    	@Override
    	public void show() {
    		this.monde = new Monde();
    		this.rendu = new MondeRendu(monde, false);
    		this.controleur = new MondeControle(monde);
     
    		Gdx.input.setInputProcessor(this);
    	}
     
    	@Override
    	public void render(float delta) {
    		Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
     
    		this.controleur.update(delta);
    		rendu.rendu();
    	}
     
    	@Override
    	public void resize(int largeur, int hauteur) {
    		rendu.setTaille(largeur, hauteur);
    	}
     
    	@Override
    	public void dispose() {
     
    	}
     
    	@Override
    	public void hide() {
     
    	}
     
    	@Override
    	public void pause() {
     
    	}
     
    	@Override
    	public void resume() {
     
    	}
     
    	//--------- METHODES INPUTPROCESSOR ---------//
     
    	@Override
    	public boolean keyDown(int codeCle) {
    		if (codeCle == Keys.LEFT) {
    			controleur.gauchePresse();
    		}
    		if (codeCle == Keys.RIGHT) {
    			controleur.droitePresse();
    		}
    		if (codeCle == Keys.UP) {
    			controleur.hautPresse();
    		}
    		if (codeCle == Keys.DOWN) {
    			controleur.basPresse();
    		}
    		return true;
    	}
     
    	@Override
    	public boolean keyTyped(char caractere) {
    		return false;
    	}
     
    	@Override
    	public boolean keyUp(int codeCle) {
    		if (codeCle == Keys.LEFT) {
    			controleur.gaucheLache();
    		}
    		if (codeCle == Keys.RIGHT) {
    			controleur.droiteLache();
    		}
    		if (codeCle == Keys.UP) {
    			controleur.hautLache();
    		}
    		if (codeCle == Keys.DOWN) {
    			controleur.basLache();
    		}
    		return false;
    	}
    Personnage.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    package ludo.libgdx.blablatime.perso;
     
    import com.badlogic.gdx.math.Rectangle;
    import com.badlogic.gdx.math.Vector2;
     
    public class Personnage {
     
    	public static final float VITESSE = 1f; //vitesse de déplacement d'un personnage
    	public static final float TAILLE = 1f; //taille d'un personnage exprimée en unité de jeu
     
    	private int id; //identifiant du personnage
    	private String nom; //nom du peronnage
     
    	Vector2 position; //position du personnage
    	Vector2 acceleration; //accélération si le personnage doit courir 
    	Vector2 vitesseDeplacement; //vitesse de déplacement du personnage
    	Rectangle limites; //les limites du personnage
     
    	//---------- CONSTRUCTEUR ---------//
    	public Personnage(int pId, String pNom, Vector2 pPosition) {
    		this.id = pId;
    		this.nom = pNom;
    		this.position = new Vector2(pPosition);
     
    		this.acceleration = new Vector2();
    		this.vitesseDeplacement = new Vector2();
     
    		this.limites = new Rectangle(position.x, position.y, TAILLE, TAILLE);
    	}
     
    	//---------- METHODES ----------//
     
    	public void update(float delta) {
    		position.add(vitesseDeplacement.tmp().mul(delta));
    	}
     
    	//---------- SET/GET ----------//
     
    	public int getId() {
    		return this.id;
    	}
     
    	public String getNom() {
    		return this.nom;
    	}
     
    	public void setVitesseDeplacement(Vector2 pVitesse) {
    		this.vitesseDeplacement = pVitesse;
    	}
    	public Vector2 getVitesseDeplacement() {
    		return this.vitesseDeplacement;
    	}
     
    	public void setPosition(Vector2 pPosition) {
    		this.position = pPosition;
    	}
    	public Vector2 getPosition() {
    		return this.position;
    	}
     
    	public void setAcceleration(Vector2 pAcceleration) {
    		this.acceleration = pAcceleration;
    	}
    	public Vector2 getAcceleration() {
    		return this.acceleration;
    	}
     
    	public void setLimites(Rectangle pLimites) {
    		this.limites = pLimites;
    	}
    	public Rectangle getLimites() {
    		return this.limites;
    	}
     
    }
    Monde.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    package ludo.libgdx.blablatime.monde;
     
    import com.badlogic.gdx.math.Vector2;
     
    import ludo.libgdx.blablatime.perso.PersoPrincipal;
     
    public class Monde {
     
    	PersoPrincipal monPerso;
     
    	//---------- CONSTRUCTEUR ----------//
    	public Monde() {
    		creerMonde();
    	}
     
    	//---------- METHODES ----------//
    	private void creerMonde() {
    		monPerso = new PersoPrincipal(0, "Bob", new Vector2(30,16));
    	}
     
    	//---------- GET/SET ----------//
    	public PersoPrincipal getMonPerso() {
    		return this.monPerso;
    	}
    }
    MondeRendu.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    package ludo.libgdx.blablatime.rendu;
     
    import com.badlogic.gdx.Gdx;
    import com.badlogic.gdx.graphics.OrthographicCamera;
    import com.badlogic.gdx.graphics.Texture;
    import com.badlogic.gdx.graphics.g2d.SpriteBatch;
    import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
     
    import ludo.libgdx.blablatime.monde.Monde;
    import ludo.libgdx.blablatime.perso.PersoPrincipal;
     
    public class MondeRendu {
     
    	private static final float CAMERA_LARGEUR = 60f;
    	private static final float CAMERA_HAUTEUR = 33.750f;
     
    	private Monde monde;
    	private OrthographicCamera cam;
     
    	private ShapeRenderer debugRenderer;
    	private boolean debug;
     
    	private SpriteBatch spriteBatch;
    	private int largeur, hauteur;			// Dimension de l'écran en pixel
    	private float pduX, pduY;   			// Facteurs de multiplication pour ajuster les positions et dimensions des unités du jeu en px
     
    	private Texture persoTexture;
     
    	//---------- CONSTRUCTEUR ----------//
    	public MondeRendu(Monde pMonde, boolean pDebug) {
    		this.monde = pMonde;
    		this.cam = new OrthographicCamera(CAMERA_LARGEUR, CAMERA_HAUTEUR);
    		this.cam.position.set(CAMERA_LARGEUR / 2f, CAMERA_HAUTEUR / 2f, 0);
    		this.cam.update();
    		spriteBatch = new SpriteBatch();
    		chargerTexture();
    	}
     
    	//---------- METHODES ---------//
    	public void setTaille(int pLargeur, int pHauteur) {
    		this.largeur = pLargeur;
    		this.hauteur = pHauteur;
    		pduX = (float)largeur / CAMERA_LARGEUR;
    		pduY = (float)hauteur / CAMERA_HAUTEUR;
    	}
     
    	private void chargerTexture() {
    		persoTexture = new Texture(Gdx.files.internal("textures/serpent.png"));
    	}
     
    	public void rendu() {
    		spriteBatch.begin();
    			dessinerPerso();
    		spriteBatch.end();
    	}
     
    	private void dessinerPerso() {
    		PersoPrincipal monPerso = monde.getMonPerso();
     
    		spriteBatch.draw(
    				persoTexture, 
    				monPerso.getPosition().x * pduX, 
    				monPerso.getPosition().y * pduY, 
    				monPerso.TAILLE * pduX, 
    				monPerso.TAILLE * pduY);
     
    		System.out.println("Perso rendu x : " + String.valueOf(monPerso.getPosition().x));
    		System.out.println("Perso rendu y : " + String.valueOf(monPerso.getPosition().y));
    	}
    }
    MondeContole

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    package ludo.libgdx.blablatime.controle;
     
    import java.util.HashMap;
    import java.util.Map;
     
    import ludo.libgdx.blablatime.monde.Monde;
    import ludo.libgdx.blablatime.perso.PersoPrincipal;
     
    public class MondeControle {
     
    	enum Keys {
    		GAUCHE, DROITE, HAUT, BAS
    	}
     
    	private Monde monde;
    	private PersoPrincipal monPerso;
     
    	static Map<Keys, Boolean> keys = new HashMap<MondeControle.Keys, Boolean>();
     
    	static {
    		keys.put(Keys.GAUCHE, false);
    		keys.put(Keys.DROITE, false);
    		keys.put(Keys.HAUT, false);
    		keys.put(Keys.BAS, false);
    	}
     
    	//--------- CONSTRUCTEUR ---------//
     
    	public MondeControle(Monde pMonde) {
    		monde = new Monde();
    		monPerso = monde.getMonPerso();
    	}
     
    	//--------- METHODES ----------//
     
    	public void gauchePresse() {
    		keys.get(keys.put(Keys.GAUCHE, true));
    	}
     
    	public void droitePresse() {
    		keys.get(keys.put(Keys.DROITE, true));
    	}
     
    	public void hautPresse() {
    		keys.get(keys.put(Keys.HAUT, true));
    	}
     
    	public void basPresse() {
    		keys.get(keys.put(Keys.BAS, true));
    	}
     
    	public void gaucheLache() {
    		keys.get(keys.put(Keys.GAUCHE, false));
    	}
     
    	public void droiteLache() {
    		keys.get(keys.put(Keys.DROITE, false));
    	}
     
    	public void hautLache() {
    		keys.get(keys.put(Keys.HAUT, false));
    	}
     
    	public void basLache() {
    		keys.get(keys.put(Keys.BAS, false));
    	}
     
    	// Méthode de mise à jour principale
    	public void update(float delta) {
    		processusEntree();
    		monPerso.update(delta);
    	}
     
    	// Modification des paramètres et de l"état du personnage
    	private void processusEntree() {
    		// Aller en haut
    		if (!keys.get(Keys.GAUCHE) && keys.get(Keys.HAUT) && !keys.get(Keys.BAS) && !keys.get(Keys.DROITE)) {
    			monPerso.getVitesseDeplacement().y = -monPerso.VITESSE;
    			monPerso.getVitesseDeplacement().x = 0;
    		}
    		// Aller en bas
    		else if (!keys.get(Keys.GAUCHE) && !keys.get(Keys.HAUT) && keys.get(Keys.BAS) && !keys.get(Keys.DROITE)) {
    			monPerso.getVitesseDeplacement().y = monPerso.VITESSE;
    			monPerso.getVitesseDeplacement().x = 0;
    		}
    		// Aller à gauche
    		else if (keys.get(Keys.GAUCHE) && !keys.get(Keys.HAUT) && !keys.get(Keys.BAS) && !keys.get(Keys.DROITE)) {
    			monPerso.getVitesseDeplacement().x = -monPerso.VITESSE;
    			monPerso.getVitesseDeplacement().y = 0;
    		}
    		// Aller à droite
    		else if (keys.get(Keys.DROITE) && !keys.get(Keys.HAUT) && !keys.get(Keys.BAS) && !keys.get(Keys.GAUCHE)) {
    			monPerso.getVitesseDeplacement().x = monPerso.VITESSE;
    			monPerso.getVitesseDeplacement().y = 0;
    		}
    		// Aller en diago haut/gauche
    		else if (keys.get(Keys.GAUCHE) && keys.get(Keys.HAUT) && !keys.get(Keys.BAS) && !keys.get(Keys.DROITE)) {
    			monPerso.getVitesseDeplacement().y = -monPerso.VITESSE;
    			monPerso.getVitesseDeplacement().x = -monPerso.VITESSE;
    		}
    		// Aller en diago bas/gauche
    		else if (keys.get(Keys.GAUCHE) && !keys.get(Keys.HAUT) && keys.get(Keys.BAS) && !keys.get(Keys.DROITE)) {
    			monPerso.getVitesseDeplacement().y = monPerso.VITESSE;
    			monPerso.getVitesseDeplacement().x = -monPerso.VITESSE;
    		}
    		// Aller en diago haut/droite
    		else if (keys.get(Keys.DROITE) && keys.get(Keys.HAUT) && !keys.get(Keys.BAS) && !keys.get(Keys.GAUCHE)) {
    			monPerso.getVitesseDeplacement().y = monPerso.VITESSE;
    			monPerso.getVitesseDeplacement().x = -monPerso.VITESSE;
    		}
    		// Aller en diago bas/droite
    		else if (keys.get(Keys.DROITE) && !keys.get(Keys.HAUT) && keys.get(Keys.BAS) && !keys.get(Keys.GAUCHE)) {
    			monPerso.getVitesseDeplacement().y = monPerso.VITESSE;
    			monPerso.getVitesseDeplacement().x = monPerso.VITESSE;
    		}
    		else {
    			monPerso.getVitesseDeplacement().y = 0;
    			monPerso.getVitesseDeplacement().x = 0;
    		}
    	}
    }

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Je ne sais pas si Libgdx intéresse mais je viens de trouver mon erreur très... bête... Je faisais une nouvelle instance de ma classe monde dans mon contrôleur donc le personnage du rendu n'étant pas récupéré par la même instance le perso ne bougeait pas...

    Ce sujet est donc résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Position initiale du personnage
    Par heck7 dans le forum C#
    Réponses: 1
    Dernier message: 05/05/2014, 18h38
  2. Gestion automatique des positions des noeuds dans un graph
    Par maissaab dans le forum Général Python
    Réponses: 7
    Dernier message: 30/04/2011, 22h32
  3. Réponses: 1
    Dernier message: 14/12/2007, 10h28
  4. Gestion de la position à l'affichage des objet Figure
    Par titoph03 dans le forum MATLAB
    Réponses: 9
    Dernier message: 27/09/2007, 13h44
  5. gestion de la position du curseur dans un textarea
    Par XavierWRC dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/02/2006, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo