Partage
  • Partager sur Facebook
  • Partager sur Twitter

SFML, afficher un rectangle hors main

    21 janvier 2019 à 21:27:20

    #include <SFML/System.hpp>
    #include <SFML/Window.hpp>
    #include <SFML/Graphics.hpp>
    #include <iostream>
    
    
    int main()
    {
    	sf::RenderWindow Fenetre(sf::VideoMode(1000, 900), "Ma fenetre");	// Creer la fenetre
    	Fenetre.setPosition(sf::Vector2i(450, 50));							// positionne la fenetre par rapport au bureau 
    	Fenetre.setTitle("Mastermind2.0");
    	Fenetre.setVerticalSyncEnabled(true);								//active la sync vertical 
    	
    	void menu();
    	menu();
    
    /*----------------------------------------------------------------------------------------------------*/
    
    	while (Fenetre.isOpen())									
    	{
    		sf::Event event;
    		while (Fenetre.pollEvent(event))
    		{
    			if (event.type == sf::Event::Closed)
    				Fenetre.close();
    		}
    		Fenetre.draw(rect);
    		Fenetre.display();
    		Fenetre.clear(sf::Color(255, 255, 255));
    	}
    	
    	return 0;
    }
    
    void menu()
    {
    	sf::RectangleShape rect(sf::Vector2f(300, 50));
    	rect.setOutlineThickness(5);
    	rect.setOutlineColor(sf::Color(0, 0, 0));
    	rect.setPosition(30, 200);
    }
    
    

    Sur la ligne 27. La fonction main ne reconnais pas 'rect', normal car c'est dans une autre fonction. Pouvez vous m'indiquez la solution et l’explication qui va avec si possible, c'est un code assez simple mais je bute à chaque fois sur les paramètres des fonctions, car je connais peu SFML.

    Merci de prendre le temps de me répondre.

    -
    Edité par pierreforques 21 janvier 2019 à 21:27:51

    • Partager sur Facebook
    • Partager sur Twitter
      21 janvier 2019 à 21:53:27

      Hello, 

      Ce n'est pas une question de connaître ou non la SFML, ce n'est ni plus ni moins que le comportement normal d'un code C++. La variable rect n'est pas connue en dehors du scope de la fonction menu() et est détruite en fin de scope de celle-ci (comme toutes les variables dans le scope d'une fonction).

      À la limite ce qui pourrait être envisageable, c'est de créer une classe Menu et de la rendre "dessinable" en faisant hériter cette classe de sf::Drawable puis en redéfinissant la fonction draw(...).

      #include <SFML/Graphics.hpp>
      
      class Menu : public sf::Drawable
      {
      public:
          Menu(){
              m_rect.setOutlineThickness(5);
              m_rect.setOutlineColor(sf::Color(0, 0, 0));
              m_rect.setPosition(30.f, 200.f);
          }
      
      private:
          void draw(sf::RenderTarget& target, sf::RenderStates states) const final{
              target.draw(m_rect);
          }
      
      private:
          sf::RectangleShape m_rect{sf::Vector2f{300.f, 50.f}};
      };
      
      /////////////////////////////////// MAIN
      int main()
      {
          ///////////////// WINDOW
          const unsigned WINDOW_WIDTH{800};
          const unsigned WINDOW_HEIGHT{600};
          sf::RenderWindow window{sf::VideoMode{WINDOW_WIDTH, WINDOW_HEIGHT}, "Brouillon_SFML"};
      
          ///////////////// RESSOURCES
          Menu menu{};
          sf::Clock clock{};
          sf::Time dt{};
      
          ///////////////// GAME LOOP
          while(window.isOpen())
          {
              sf::Event event{};
              ///////////////// EVENTS LOOP
              while(window.pollEvent(event))
              {
                  if(event.type == sf::Event::Closed){
                      window.close();
                  }
              }
      
              ///////////////// UPDATE
              dt = clock.restart();
      
              ///////////////// DRAW
              window.clear();
              window.draw(menu);
              window.display();
          }
      
          return 0;
      }

      Sinon, si tu ne souhaites pas faire de classe, il faut juste que ta variable rect soit dans le scope de la fonction main().

      -
      Edité par Guit0Xx 21 janvier 2019 à 22:01:49

      • Partager sur Facebook
      • Partager sur Twitter

      ...

        22 janvier 2019 à 8:59:34

        Merci de ta réponse rapide ! Je vais travailler/étudier sur ce que tu m'as dis et je reviens vers toi si j'ai d'autres questions.

        Merci.

        • Partager sur Facebook
        • Partager sur Twitter

        SFML, afficher un rectangle hors main

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown