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