Bonjour,
Je me suis mis pour de bon à la sfml apres avoir vu la comparaison sfml vs sdl du createur...
Je fais un jeu en 2D, et je vais avoir besoin de trois ecrans, un splash screen, le menu de connexion et le jeu lui meme, donc pour separer proprement ces ecrans, voici mon main:
int main()
{
Window* w = new Window();
std::vector<Screen*> Screens;
Screens.push_back(new SplashScreen());
//Screens.push_back(new LoginScreen());
Screens.push_back(new Ingame());
int iscreen = 0, temp;
while(iscreen >= 0)
{
// On lance l'affichage
temp = Screens[iscreen]->Run(w);
// 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];
w->Clear();
iscreen = temp;
}
}
return EXIT_SUCCESS;
}
L'affichage du Splash se fait tres bien, mais apres quelques secondes (le temps que le splash passe, j'ai du mettre 2secondes) mon ecran commence a flasher l'image qu'il y avait dans le splash.
Voici le code du splash:
class SplashScreen: public Screen
{
public:
SplashScreen() {}
~SplashScreen() {}
int Run (Window* App);
private:
};
int SplashScreen::Run(Window* App)
{
sf::Texture splash;
splash.loadFromFile("Data/gui/splash/splashscreen.jpg");
sf::Sprite spr(splash);
sf::Clock clock;
sf::Event event;
clock.restart();
while(App->Running()) {
// Event processing.
while(App->GetEvent(event) ) {
//desktop.HandleEvent( event );
// If window is about to be closed, leave program.
if(Window::Closing(event)) {
exit(0);
}
}
std::cout << "splash screen"<<std::endl;
if(clock.getElapsedTime() > sf::seconds(2)) // On reste sur cet ecran 2secs
{
return 1;
}
App->Draw(spr);
App->Render();
}
return -1;
}
Infos:
App->Draw(spr) est un simple template pour faire appel à RenderWindow::draw();
App->Render() est un simple alias pour faire appel à RenderWindow::display();
Donc a la sortie du splash, comme on le voit dans le main, je fais un w->Clear(); (alias pour RenderWindow::clear()) et de plus, l'objet SplashScreen est détruit, donc le sprite & texture devraient logiquement disparaitres....
Mais a ce moment la, mon ecran flash, et si je le regarde plus de 30sec, je fais une crise d'épilepsie !
Quelqu'un a une idée?
nico.