Bonjour à tous et à toutes

Je crée un petit jeu en 2D (vu de coté) histoire de m'entrainer un peu. Pour l'instant, le programme contient un objet Personnage qui se déplace à gauche ou à droite suivant que l'utilisateur appuye sur la flèche gauche ou droite de son clavier. Tout fonctionne, seulement, j'ai un petit soucis avec la réactivité du programme. En fait, lorsque j'appuye sur la flèche droite (ou gauche) de mon clavier alors que mon personnage est au repos, alors l'animation change directement (on le voit bien directement marcher), seulement, le personnage reste presque une demi seconde à l'arrêt avant de commencer à se déplacer (une fois qu'il est lancé, le personnage de déplace de manière très fluide). Est ce que quelqu'un saurait me dire à quoi c'est du? Et surtout, comment enlever ce petit problème svp?

==> Edit : problème réglé en utilisant un slot qui fait bouger le personnage. Le slot est appellé toutes les x millisecondes par un QTimer, et ca fonctionne (mais j'ai troujours le problème cité plus bas :s)

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
#include "perso.hpp
 
#define _DEPLACEMENT_LENT_ 3
 
#define _RIGHT_ true
#define _LEFT_ false
 
Personnage::Personnage(int xDeBase, int yDeBase, bool direction) : QWidget()
{
   /* On initialise les positions de base du personnage */
   m_x = xDeBase;
   m_y = yDeBase;
 
   /* on initialise la direction */
   m_direction = direction;
 
   /* On charge tous les elements dont on a besoin. */
   Loading();
 
   /* On affiche l'animation de début suivant la direction. */
   if (m_direction == _RIGHT_) m_labelMovie->setMovie(m_animStanceNormal_R);
   else if (m_direction == _LEFT_) m_labelMovie->setMovie(m_animStanceNormal_L);
 
   /* On affiche l'animation aux coordonnées initiales. */
   m_labelMovie->move(m_x, m_y);
}
 
void Personnage::Loading(void)
{
   /* On crée le label et on inclu dedans les QMovie qui vont etre affichees dedans. */
   m_labelMovie = new QLabel(this);
 
   /* Chargement de toutes les animations (QMovie). */
 
   m_animWalk_R = new QMovie(m_labelMovie);
         m_animWalk_R->setFileName("perso1/runNormal-R.gif");
         m_animWalk_R->start();
   m_animWalk_L = new QMovie(m_labelMovie);
         m_animWalk_L->setFileName("perso1/runNormal-L.gif");
         m_animWalk_L->start();
   m_animStance_R = new QMovie(m_labelMovie);
         m_animStance_R->setFileName("perso1/stance-R.gif");
         m_animStance_R->start();
   m_animStance_L = new QMovie(m_labelMovie);
         m_animStance_L->setFileName("perso1/stance-L.gif");
         m_animStance_L->start();
}
 
void Personnage::keyPressEvent(QKeyEvent *event) 
{
   /* Le perso se dirige vers la droite. */   
   if(event->key() == Qt::Key_Right)
   {
      m_direction = _RIGHT_;
      Walk();
   }
   /* Le perso se dirige vers la gauche.*/
   else if(event->key() == Qt::Key_Left)
   {
      m_direction = _LEFT_;
      Walk();
   }
}
 
void Personnage::keyReleaseEvent(QKeyEvent *event) 
{
   Stance();
}
 
inline void Personnage::Walk(void)
{
   if (m_direction == _RIGHT_)
   {
      m_labelMovie->resize(m_animWalk_R->frameRect().size());
      m_labelMovie->setMovie(m_animWalk_R);
      m_x += _DEPLACEMENT_LENT_;
      m_labelMovie->move(m_x, m_y);
   }
   else if (m_direction == _LEFT_)
   {
      m_labelMovie->resize(m_animWalk_L->frameRect().size());
      m_labelMovie->setMovie(m_animWalk_L);
      m_x -= _DEPLACEMENT_LENT_;
      m_labelMovie->move(m_x, m_y);
   }
}
 
inline void Personnage::Stance(void)
{
   if (m_direction == _RIGHT_)
   {
      m_labelMovie->resize(m_animStance_R->frameRect().size());
      m_labelMovie->setMovie(m_animStance_R);
   }
   else if (m_direction == _LEFT_)
   {
      m_labelMovie->resize(m_animStance_L->frameRect().size());
      m_labelMovie->setMovie(m_animStance_L);
   }
}
Edit : Maintenant que j'y pense, n'est ce pas trop grave d'avoir fait hérité ma classe Personnage de QWidget? Dans le sens ou maintenant, si je veux inclure ma classe Personnage dans un autre QWidget, je ne voit pas trop comment faire :s J'ai essayé en ajoutant, comme 4e argument au constructeur, un pointeur vers un QWidget parent, et mettre ensuite, a tous les constructeurs de ma classe "Personnage", comme parent, non pas "this", mais le pointeur vers le parent de personnage (donc le 4e argument) (je ne sais pas si j'ai réussis a me faire comprendre, je doit encore faire des effort en explications, j'avoue ). Cette méthode affiche bien l'objet personnage, et je sais en inclure plusieurs dans une QMainWindow par exemple, seulement, mon(/mes) personnage ne réagit plus lorsque j'appuye sur les touches qui sont sensé le faire se déplacer :s

Et pour le problème de réactivité plus haut, aurait-je du plutot apprendre la SFML et tenter de faire déplacer mon perso avec plutot que Qt?

Bonne journée

ps : si vous voulez que je poste plus de code pour une meilleur compréhension, dites le moi svp