Bonjour,
Mon programme a l'air correct au premier abord.
Ce que je cherche à faire ?
Déplacer un pacman avec les touches directionnelles du clavier (up, down, left et right).
Le Down et Right fonctionne bien, mais pas le Up et Left.
Je pense que ça vient de la soustration ...
Ce qui est bizarre, c'est quand changeant :
setPosY(getPosY()-10);
par
setPosY(getPosY()+10); pour Up
ça fonctionne, mais ça se déplace d'un plus grand saut que Down ... pourtant mes accesseurs n'ont pas l'air faux.
Puis 2ème soucis, je souhaiterai changer l'image lorsque j'appuie sur les touches pour que le pacman soit orienté, mais l'image ne se change pas ...
Voici mes sources :
main.cpp
Fenetre.h
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 #include <QApplication> #include <QPushButton> #include "Fenetre.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); // Fenetre fenetre; QObject::connect(&fenetre, SIGNAL(pressed(QKeyEvent)), &fenetre, SLOT(keyPressEvent(QKeyEvent))); // Affichage de la fenêtre fenetre.show(); return app.exec(); }
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 #ifndef DEF_MAFENETRE #define DEF_MAFENETRE #include <QApplication> #include <QWidget> #include <QLabel> #include <QKeyEvent> class Fenetre : public QWidget // On hérite de QWidget (IMPORTANT) { public: Fenetre(); void keyPressEvent(QKeyEvent *event); void setPosX(int x); void setPosY(int y); int getPosX(); int getPosY(); private: QLabel *pacman; int posX; int posY; }; #endif
Fenetre.cpp
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 #include "Fenetre.h" Fenetre::Fenetre() : QWidget() { setFixedSize(800, 600); setStyleSheet("background-color: rgb(0,0,0)"); posX = 30; posY = 30; pacman = new QLabel(this); pacman->setPixmap(QPixmap("res/bitmap6.bmp")); pacman->move(posX, posY); } void Fenetre::keyPressEvent(QKeyEvent *event) { switch(event->key()) { case Qt::Key_Up : setPosY(getPosY()-10); pacman->setPixmap(QPixmap("res/bitmap1.bmp")); pacman->move(getPosX(),getPosY()); case Qt::Key_Down : setPosY(getPosY()+10); pacman->setPixmap(QPixmap("res/bitmap4.bmp")); pacman->move(getPosX(),getPosY()); case Qt::Key_Left : setPosX(getPosX()-10); pacman->setPixmap(QPixmap("res/bitmap8.bmp")); pacman->move(getPosX(),getPosY()); case Qt::Key_Right : setPosX(getPosX()+10); pacman->setPixmap(QPixmap("res/bitmap6.bmp")); pacman->move(getPosX(),getPosY()); } } void Fenetre::setPosX(int x) { posX = x; } void Fenetre::setPosY(int y) { posY = y; } int Fenetre::getPosX() { return posX; } int Fenetre::getPosY() { return posY; }
Sauriez-vous comment je pourrais régler ce(s) problème(s) ?
Je n'attends pas une correction, mais au moins si on pouvait me mettre sur la piste ...
Merci d'avance !
Partager