Bonsoir !
Le problème:
Reussir à afficher de facon dynamique plusieurs ecrans differents en utilisant une classe pour chaque ecran.
note: Etant donné que l'erreur ne viens pas de la bibliotheque que j'utilise (SFML), cela est un probleme de conception !
Approche: heritage
Chaque classe ecran herite d'une classe mere purement virtuelle:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Screen { public : Screen() {}; ~Screen() {}; virtual int Run (sf::RenderWindow& App) =0; Perennials* m_perennials; ClientSocket* m_tcpsocket; ClientSocket* m_udpsocket; };Donc dans Run(), il se passe des choses... et a un moment je vais retourner un int, qui est censé nous amener a un autre ecran !
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 class SplashScreen: public Screen { public: SplashScreen(Perennials* wd, ClientSocket* tcps) { m_perennials = wd; m_tcpsocket = tcps; } ~SplashScreen() {} int Run (sf::RenderWindow& App); static const int ID = 1; private: // Common structure //sfg::SFGUI m_sfgui; //sfg::Desktop desktop; sf::Event event; sf::Clock clock; };
Donc, voici le main:
Le probleme de cette approche: ecran noir.
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 // std::vector<Screen> Screens; et on y ajoute nos ecrans. int iscreen = 0, temp; while(iscreen >= 0) { // On lance l'affichage temp = Screens[iscreen]->Run(App); // On vient de sortir de la boucle de Screen::Run() // Si temp est different, on met a jour les variables if(temp != iscreen) { delete Screens[iscreen]; App.clear(); iscreen = temp; } }
Si je fais simplement un SplashScreen ss(...); ss.Run(App); l'écran marche parfaitement.
Donc... un gros soucis ...
Avant que les modos vire mon sujet dans 2D>SFML: Laurent Gomila pense que c'est bien un probleme de conception... !
merci d'avance, nico
Partager