Bonjour.
Excusez moi si je me trompe de forum mais je crois que mon problème est de l'ordre du langage (et il n'y a pas la SFML dans les entraides sur les bibliothèques).
J'essaie de modifier la couleur d'un rectangle en passant la souris sur un cercle en utilisant la SFML.
C'est pour faire plus tard un bouton de sélection.
J'ai créé un setter pour mettre mon rectangle en bleu et un autre pour le mettre en rouge, mais ça ne fait rien, j'ai mis dans ces setters des cout et dans la console ça agit bien.
Auriez vous une petite idée du problème?
main.cpp :
Objet.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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #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,200,200,50,sf::Color::Yellow); Bouton bouton1(100, 50, 10, recept1); while (window.pollEvent(event)) { if (event.type == sf::Event::EventType::Closed) window.close(); } window.clear(); bouton1.miseAjour(window); recept1.afficher(window); bouton1.afficher(window); window.display(); } return 0; }
Bouton.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
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.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 #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, Recepteur &rec); void afficher(sf::RenderTarget &target); void miseAjour(const sf::Window &target); bool estDansCercle(sf::Vector2i &pos); private: sf::CircleShape cercle; int rayon; Recepteur recept; }; #endif // BOUTON_H
recepteur.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
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 #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, Recepteur &rec) { 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) { sf::Vector2i position = sf::Mouse::getPosition(target); if (Bouton::estDansCercle(position)) recept.setCouleurBleue(); else recept.setCouleurRouge(); } 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.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 #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, sf::Color coul); void afficher(sf::RenderTarget &target); void setCouleurBleue(); void setCouleurRouge(); private: sf::RectangleShape rectangle; int largeur; int hauteur; sf::Color couleur; }; #endif // RECEPTEUR_H
Merci.
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 #include "Recepteur.h" #include <iostream> using namespace std; Recepteur::Recepteur() { } Recepteur::Recepteur(int posX, int posY, int larg, int haut, sf::Color coul) { Xpos = posX; Ypos = posY; largeur = larg; hauteur = haut; couleur = coul; rectangle.setPosition(Xpos, Ypos); rectangle.setSize(sf::Vector2f(largeur, hauteur)); rectangle.setFillColor(couleur); } void Recepteur::afficher(sf::RenderTarget &target) { rectangle.setFillColor(couleur); target.draw(rectangle); } void Recepteur::setCouleurBleue() { couleur = sf::Color::Blue; cout << "dedans" << endl; } void Recepteur::setCouleurRouge() { couleur = sf::Color::Red; cout << "dehors" << endl; }
Partager