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;
		}
	}
}