Problème de relations entre objets
Bonjour.
Je fais un petit programme avec la SFML.
J'ai deux objets(Boutons) que je veux faire agir sur un recepteur(un rectangle), quand on passe la souris sur l'un des boutons le rectangle passe au bleu.
Le problème c'est que il n'y a que le dernier objet qui agit sur le récepteur et pas le premier je ne sais pas pourquoi.
main.cpp :
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
| #include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "Bouton.h"
#include "Recepteur.h"
#include "Objet.h"
int main()
{
sf::VideoMode videoMode(400, 300);
sf::RenderWindow window(videoMode, "Fenetre SFML");
while (window.isOpen())
{
sf::Event event;
Recepteur recept1(50,100,50,50);
Bouton bouton1(100, 50, 10);
Bouton bouton2(180, 50, 10);
while (window.pollEvent(event))
{
if (event.type == sf::Event::EventType::Closed)
window.close();
}
window.clear();
bouton1.miseAjour(window,recept1);
bouton2.miseAjour(window,recept1);
recept1.afficher(window);
bouton1.afficher(window);
bouton2.afficher(window);
window.display();
}
return 0;
} |
Objet.h :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #ifndef OBJET_H
#define OBJET_H
class Bouton;
class Recepteur;
class Objet
{
public:
Objet();
protected:
int Xpos;
int Ypos;
private:
};
#endif // OBJET_H |
Bouton.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
| #ifndef BOUTON_H
#define BOUTON_H
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include "Objet.h"
#include "Recepteur.h"
class Bouton : public Objet
{
public:
Bouton();
Bouton(int posX, int posY, int ray);
void afficher(sf::RenderTarget &target);
void miseAjour(const sf::Window &target, Recepteur &rec);
bool estDansCercle(sf::Vector2i &pos);
private:
Recepteur recept;
sf::CircleShape cercle;
int rayon;
};
#endif // BOUTON_H |
bouton.cpp :
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
| #include "Bouton.h"
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>
#include <math.h>
using namespace std;
Bouton::Bouton()
{
}
Bouton::Bouton(int posX, int posY, int ray)
{
rayon = ray;
Xpos = posX;
Ypos = posY;
cercle.setRadius(rayon);
cercle.setPosition(Xpos,Ypos);
cercle.setFillColor(sf::Color::White);
//recept = rec;
}
void Bouton::afficher(sf::RenderTarget &target)
{
target.draw(cercle);
}
void Bouton::miseAjour(const sf::Window &target, Recepteur &rec)
{
sf::Vector2i position = sf::Mouse::getPosition(target);
if (Bouton::estDansCercle(position))
{
rec.setCouleur(sf::Color::Blue);
}
else rec.setCouleur(sf::Color::Red);
}
bool Bouton::estDansCercle(sf::Vector2i &pos)
{
sf::Vector2f posCercle = cercle.getPosition();
sf::Vector2f centreCercle((posCercle.x + (cercle.getRadius())),(posCercle.y + (cercle.getRadius())));
int XdeplOrig = pos.x-centreCercle.x;
int YdeplOrig = pos.y-centreCercle.y;
int distOrigFenetre = sqrt((XdeplOrig*XdeplOrig)+(YdeplOrig*YdeplOrig));
return distOrigFenetre<cercle.getRadius();
} |
Recepteur.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
| #ifndef RECEPTEUR_H
#define RECEPTEUR_H
#include <SFML/Graphics.hpp>
#include "Objet.h"
class Recepteur : public Objet
{
public:
Recepteur();
Recepteur(int posX, int posY, int larg, int haut);
void afficher(sf::RenderTarget &target);
void setCouleur(sf::Color coul);
private:
sf::RectangleShape rectangle;
int largeur;
int hauteur;
sf::Color couleur;
};
#endif // RECEPTEUR_H |
Recepteur.cpp :
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
| #include "Recepteur.h"
#include <iostream>
using namespace std;
Recepteur::Recepteur()
{
}
Recepteur::Recepteur(int posX, int posY, int larg, int haut)
{
Xpos = posX;
Ypos = posY;
largeur = larg;
hauteur = haut;
rectangle.setPosition(Xpos, Ypos);
rectangle.setSize(sf::Vector2f(largeur, hauteur));
}
void Recepteur::afficher(sf::RenderTarget &target)
{
rectangle.setFillColor(couleur);
target.draw(rectangle);
}
void Recepteur::setCouleur(sf::Color coul)
{
couleur = coul;
} |
Merci.