Ça ne crash pas mais si je veux afficher la valeur avec cout :
cout << App->GetWidth() << endl;
Aucune valeur n'est affichée alors que si je place ce bout de code dans la fonction
Run(sf::RenderWindow &App) qui est déclarée dans la classe Screen, ça affiche bien la longueur de la fenêtre (ici 1024)
Voilà un bout de code :
class Screen : public sf::Thread
{
public :
Screen();
int Run(sf::RenderWindow &window);
//int GetExit();
//virtual void Run();
protected :
sf::RenderWindow *App;
int exit;
//private :
//virtual void Run() = 0;
};
Screen::Screen() : exit(-3)
{
}
int Screen::Run(sf::RenderWindow &window)
{
App = &window;
Launch();
while(exit == -3);
return exit;
}
void Jeu::Run()
{
bool Running(true);
sf::Event Event;
while(Running)
{
while(App->GetEvent(Event))
{
if(Event.Type == sf::Event::Closed)
exit = SCREEN_EXIT;
if(Event.Type == sf::Event::KeyPressed)
{
switch(Event.Key.Code)
{
case sf::Key::Escape:
exit = SCREEN_MENU;
break;
}
}
}
if(exit != -3)
Running = false;
// Affichage
App->Clear(sf::Color(0, 255, 0));
App->Display();
}
exit = SCREEN_EXIT;
}
Et la fonction main :
int main(int argc, char** argv)
{
sf::RenderWindow App(sf::VideoMode(1024, 768, 32), "Nouveau Jeu", sf::Style::Close);//|sf::Style::Fullscreen);
//sf::RenderWindow App(sf::VideoMode(800, 600, 32), "Nouveau Jeu", sf::Style::Close);
// Vue
sf::View view(sf::FloatRect(0, 0, 1024, 768));
App.SetView(view);
// Menu/Jeu/Options
std::vector<Screen*> screens;
int screen = 0;
Jeu s_jeu; // Creation d'un affichage pour le jeu
screens.push_back(&s_jeu);
while(screen >= 0)
{
screen = screens[screen]->Run(App);
}
return EXIT_SUCCESS;
}
Une remarque :Par rapport à la ligne
while(exit == -3);, ça ne fonctionne pas comme je veux donc ne la prend pas en compte, c'est juste pour ne pas répéter la boucle du main.