Conception foireuse: heritage
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:
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;
}; |
Code:
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 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 !
Donc, voici le main:
Code:
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;
}
} |
Le probleme de cette approche: ecran noir.
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