Bonjour a tous,
je suis actuellement entrain de développer un mini jeu 2D avec Qt. J'ai créer une classe rat qui possède une méthode lui permettant de se déplacer, j'utilise donc un QTimer.
Seulement quand je compile, le programme crash. J'ai donc lancer une session de deboguage et il m'indique une erreur de type segment faul.
Je vous joint ci dessous les fichier de la classe rat et de la classe niveau.
Le rat:
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 #ifndef RAT_H #define RAT_H #include "personnage.h" #include <QWidget> #include <QLabel> class Rat : public Personnage { protected: QTimer *m_timerD; QImage m_imagePrinc; public: Rat(); Rat(int abscisses , int ordonnee); QImage getImagePrinc(); void deplacerDroiteR( Personnage *cible, QLabel *labRat, QLabel *labPers); public slots: void timerZero(); void deplacerDroiteRat(); }; #endif // RAT_Hensuite le niveau:
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 #include "rat.h" Rat::Rat(): Personnage() { m_imagePrinc.load("ratfinal.png"); m_timerD = new QTimer(this); } Rat::Rat(int abscisses, int ordonnee):Personnage(abscisses , ordonnee) { m_imagePrinc.load("ratfinal.png"); m_timerD = new QTimer(this); } QImage Rat::getImagePrinc() { return m_imagePrinc; } void Rat::deplacerDroiteR( Personnage *cible, QLabel *labRat, QLabel *labPers) { do { m_timerD->start(1*1000); if(m_timerD->isActive() == false) { deplacerDoite(labRat, this); } if (m_absices + 101 == cible->getAbsices()) { attaquer(cible ,labPers); } m_timerD = 0; }while(m_vie != 0); } void Rat::timerZero() { m_timerD = 0; } void Rat::deplacerDroiteRat() { }
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 #ifndef NIVEAU_H #define NIVEAU_H #include <QMainWindow> #include "magicien.h" #include "Rat.h" #include <QKeyEvent> #include <QPropertyAnimation> namespace Ui { class Niveau; } class Niveau : public QMainWindow { Q_OBJECT public: explicit Niveau(QWidget *parent = 0); ~Niveau(); void keyPressEvent(QKeyEvent *ev); private: bool upPressed; Ui::Niveau *ui; Magicien *m_perso1; QImage *m_imageFond; int m_coteGauche; int m_coteDroit; Rat *m_ratTest; QPropertyAnimation *animation; }; #endif // NIVEAU_Hmerci d'avance
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 #include "niveau.h" #include "ui_niveau.h" Niveau::Niveau(QWidget *parent) : QMainWindow(parent), ui(new Ui::Niveau) { this->setFixedSize(800,326); ui->setupUi(this); m_perso1 = new Magicien(240,200); m_ratTest = new Rat(600,170); //design fond m_coteDroit = 326; m_coteGauche = 0; m_imageFond = new QImage; m_imageFond->load("fond"); ui->fond->setPixmap(QPixmap::fromImage(*m_imageFond)); //personnage ui->fondPers->setPixmap(QPixmap::fromImage(m_perso1->getImagePrinc())); //RatTest ui->fondRat->setPixmap(QPixmap::fromImage(m_ratTest->getImagePrinc())); m_ratTest->deplacerDroiteR( m_perso1 , ui->fondRat , ui->fondPers); animation = new QPropertyAnimation(ui->fondPers, "geometry"); } Niveau::~Niveau() { delete ui; } void Niveau::keyPressEvent(QKeyEvent *ev) { if (ev->key() == Qt::Key_D) { if (m_perso1->getAbsices() + 80 == 800) { m_perso1->resterPlace(ui->fondPers, m_perso1); } else { m_perso1->deplacerDoite(ui->fondPers, m_perso1); } } else if(ev->key() == Qt::Key_Q) { if (m_perso1->getAbsices() == 0) { m_perso1->resterPlace(ui->fondPers, m_perso1); } else{ m_perso1->deplacerGauche(ui->fondPers, m_perso1); } } else if (ev->key() == Qt::Key_Space) { m_perso1->animation(ui->fondPers); if (m_perso1->getAbsices() + 87 >= m_ratTest->getAbsices() && m_perso1->getAbsices() <= m_ratTest->getAbsices() + 101 ) { m_perso1->attaquer(m_ratTest, ui->fondRat); } } }
Partager