Bonjour!! voila le sujet du post c'est le déplacement de Link dans un jeu comme zelda.
Le principe:
-Si j'appuie sur une seule touche directionnelle, Link se déplace dans cette direction uniquement.
-si j'appuie sur deux touches directionnelles, je garde la direction de la premiere touche enfoncée(ainsi que ses sprites), et j'effectue le déplacement que donne la deuxieme touche enfoncée
exemple: droite puis bas, je vois link de profil, se déplaçant en diagonale vers la droite et le bas.
-Link se fige si j'appuie sur trois ou quatre touches directionnelles en même temps.
Je suis arrivé après moult réfléxion à résoudre les deux premiers points, et je vous demanderai de ne pas proposer de nouvelle solution aux problèmes s'y référant, ce n'est pas le but de ce post.
Je voudrais simplement que vous m'expliquiez pourquoi quand j'appuie sur (gauche,bas et droite)
OU (haut,bas et droite) , et seulement dans ces deux cas de figure, Link se fige, et pourquoi pas dans les deux autres cas possibles.
Je vous donne le code de ma classe.
Keyboard.cpp:
Code : C++ 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 | #include <SFML/Graphics.hpp>
#include "Keyboard.h"
#include "Personnage.h"
Keyboard::Keyboard()
{
}
void Keyboard::Touches(sf::RenderWindow &Ecran,Personnage &link,const sf::Input &Input)
{
cptTouches = 0;
Ecran.GetEvent(Event);
Ecran.GetInput();
switch(Event.Type)
{
case sf::Event::Closed:
Ecran.Close();
break;
case sf::Event::KeyPressed:
switch(Event.Key.Code)
{
case sf::Key::Escape:
Ecran.Close();
break;
default:
break;
}
break;
default:
break;
}
/*le haut*/
if(Input.IsKeyDown(sf::Key::Up) && !Input.IsKeyDown(sf::Key::Down) && !Input.IsKeyDown(sf::Key::Left) && !Input.IsKeyDown(sf::Key::Right))
{
link.DeplacerPerso(HAUT, Vecteur);
link.SetOrdonnee(38,74);
}
else if (Input.IsKeyDown(sf::Key::Up))
{
link.DeplacerPerso(HAUT, Vecteur);
cptTouches++;
}
/*le bas*/
if(Input.IsKeyDown(sf::Key::Down) && !Input.IsKeyDown(sf::Key::Up) && !Input.IsKeyDown(sf::Key::Left) && !Input.IsKeyDown(sf::Key::Right))
{
link.DeplacerPerso(BAS, Vecteur);
link.SetOrdonnee(0,36);
}
else if(Input.IsKeyDown(sf::Key::Down))
{
link.DeplacerPerso(BAS, Vecteur);
cptTouches++;
}
/*la gauche*/
if(Input.IsKeyDown(sf::Key::Left) && !Input.IsKeyDown(sf::Key::Up) && !Input.IsKeyDown(sf::Key::Down) && !Input.IsKeyDown(sf::Key::Right))
{
link.DeplacerPerso(GAUCHE, Vecteur);
link.SetOrdonnee(0,36);
}
else if(Input.IsKeyDown(sf::Key::Left))
{
link.DeplacerPerso(GAUCHE,Vecteur);
cptTouches++;
}
/*la droite*/
if(Input.IsKeyDown(sf::Key::Right) && !Input.IsKeyDown(sf::Key::Up) && !Input.IsKeyDown(sf::Key::Down) && !Input.IsKeyDown(sf::Key::Left))
{
link.DeplacerPerso(DROITE, Vecteur);
link.SetOrdonnee(76,112);
}
else if(Input.IsKeyDown(sf::Key::Right))
{
link.DeplacerPerso(DROITE,Vecteur);
cptTouches++;
}
if(cptTouches >= 3)
link.Paralysie(true);
else
link.Paralysie(false);
}
|
note: des lecteurs attentifs remarqueront que je blitte les mêmes sprites pour la gauche et le bas, mais c'est juste parce que je n'ai pas encore fait les sprites pour la gauche, et cela n'intervient pas dans le déplacement de Link.
Un grand merci à toute l'aide que vous pourrez m'apporter.
Édité
le 24/07/2008 à 07:06:03
par
djipey