Qt problème avec une méthode et des pointeurs
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:
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_H |
Code:
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()
{
} |
ensuite le niveau:
Code:
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_H |
Code:
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);
}
}
} |
merci d'avance :)