Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SFML] sf::String

Affichage de variables

Sujet résolu
    25 avril 2008 à 16:25:02

    Salut c'est encore mwa --'.
    Je crois que je suis maudit xD

    Voilà en fait je voudrais convertir des int en string, ca c'est fait et ca marche !
    (je me suis basé sur ce code :)
    #include <sstream>
    
    int main()
    {    
        // créer un flux de sortie
        std::ostringstream oss;
        // écrire un nombre dans le flux
        oss << 10;
        // récupérer une chaîne de caractères
        std::string result = oss.str();
    }
    


    Maintenant comment faire pour actualiser le string contenant la variable ?
    Parce que chaque fois que j'essaye d'assigner une nouvelle valeur, elle se concacétane (je sais pas si c'est bien orthographié et si ca existe ^^").

    Voilà le code du projet:

    #include <SFML/Graphics.hpp>
    #include <sstream>
    
    float posX;
    float posY;
    
    int heroHP = 10;
    
    int main()
    {
        // Create the main rendering window
        sf::RenderWindow App(sf::VideoMode(800, 600, 32), "kumae");
    
        // Load the sprite image from a file
        sf::Image heroBas;
    	sf::Image heroLeft;
    	sf::Image heroRight;
    	sf::Image heroHaut;
    
        if (!heroHaut.LoadFromFile("herohaut.png"))
            return EXIT_FAILURE;
    	if (!heroBas.LoadFromFile("herobas.png"))
            return EXIT_FAILURE;
    	if (!heroLeft.LoadFromFile("heroleft.png"))
            return EXIT_FAILURE;
    	if (!heroRight.LoadFromFile("heroright.png"))
            return EXIT_FAILURE;
    
        // Create the sprite
        sf::Sprite spriteBas(heroBas);
    	sf::Sprite spriteLeft(heroLeft);
    	sf::Sprite spriteRight(heroRight);
    	sf::Sprite spriteHaut(heroHaut);
    	sf::Sprite actualSprite;
    	
    	std::ostringstream heroHP_stream;
    	heroHP_stream << heroHP;
    	sf::String txt_heroHP("HP: " + heroHP_stream.str());
    
    	actualSprite = spriteBas;
        // Change its properties
        //Sprite.SetColor(sf::Color(0, 255, 255, 128));
        actualSprite.SetPosition(0.f, 0.f);
    
        // Start game loop
        bool Running = true;
        while (Running)
        {
            // Process events
            sf::Event Event;
            while (App.GetEvent(Event))
            {
                // Close window : exit
                if (Event.Type == sf::Event::Closed)
                    Running = false;
            }
    
            // Get elapsed time
            float ElapsedTime = App.GetFrameTime();
    
            // Move the sprite
            if (App.GetInput().IsKeyDown(sf::Key::Left)) 
    		{
    			posX -= 100 * ElapsedTime;
    			actualSprite = spriteLeft;
    		}
            if (App.GetInput().IsKeyDown(sf::Key::Right)) 
    		{
    			posX += 100 * ElapsedTime;
    			actualSprite = spriteRight;
    		}
    		if (App.GetInput().IsKeyDown(sf::Key::Up))    
    		{
    			posY -= 100 * ElapsedTime;
    			actualSprite = spriteHaut;
    		}
            if (App.GetInput().IsKeyDown(sf::Key::Down))  
    		{
    			posY += 100 * ElapsedTime;
    			actualSprite = spriteBas;
    		}
    		
    		if (App.GetInput().IsKeyDown(sf::Key::Subtract))
    		{
    			heroHP -= 2;
    		}
    
    		// Définit la position du sprite
    		actualSprite.SetPosition(posX, posY);
            // Display sprite in our window
            App.Draw(actualSprite);
    		txt_heroHP = "HP: " + heroHP_stream.str();
    		heroHP_stream << heroHP;
    		App.Draw(txt_heroHP);
            // Display window contents on screen
            App.Display();
        }
    
        return EXIT_SUCCESS;
    }
    


    Merci de votre future aide ^^ !
    • Partager sur Facebook
    • Partager sur Twitter
      25 avril 2008 à 17:25:45

      Tu détruis ta variable et tu assignes une nouvelle valeur, je ne connais pas bien <sstream> mais je pense que c'est possible :)
      • Partager sur Facebook
      • Partager sur Twitter
        25 avril 2008 à 17:50:20

        Comment dois-je faire ^^ ?
        • Partager sur Facebook
        • Partager sur Twitter
          25 avril 2008 à 18:11:56

          si on schématise:
          int HP = 10;
          std::ostringstream Oss;
          sf::String Str;
          
          for(;;)
          {
          	Oss.str("");
          	Oss << HP;
          	Str = "HP : " + Oss.str();
          }
          


          ou alors tu passes par un lexical_cast (soit par Boost ou tu l'implemente toi-meme)
          • Partager sur Facebook
          • Partager sur Twitter
            25 avril 2008 à 18:26:09

            Cette solution me parait bien je l'essaye tout de suite

            EDIT: ca marche ^^"
            Merci beaucoup ^^
            • Partager sur Facebook
            • Partager sur Twitter

            [SFML] sf::String

            × 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