Экран не очищает последний текст, почему?

0

Текст на экране не заменяется почему?

#include <SFML/Graphics.hpp>
#include <sstream>

using namespace std;


int main(){
  stringstream ss;
  sf::Font f;
  int mama = 212;
  sf::RenderWindow W(sf::VideoMode(640, 480) , "amama");
  W.setFramerateLimit(60);
  sf::Text text;

  if(!f.loadFromFile("arial.ttf")){

  }

  text.setFont(f);
  text.setColor(sf::Color::Red);

  while(W.isOpen()){
    sf::Event e;

    while(W.pollEvent(e)){
      switch(e.type){
        case sf::Event::Closed:
          W.close();
          break;
        case sf::Event::KeyPressed:
          if(e.key.code == sf::Keyboard::Up){

            mama++;
            ss << mama;
            text.setString(ss.str());
          }
          break;
      }
    }

    W.draw(text);
    W.display();
    W.clear();

  }
}

В первый раз я вызываю текст, который он показывает в порядке. Но когда я назову его снова, текст не будет заменен, он останется, и на нем появятся 6 номеров, и это не очистит его. Можете ли вы мне помочь? Я не так хорошо объясняю.

Теги:
sfml

1 ответ

3
Лучший ответ

объяснение

Перед вставкой новых данных вам нужно очистить содержимое ваших std::stringstream ss.

Текущая ситуация заключается в том, что вы сначала вставляете "212" (мама), затем вы вставляете "213" (увеличиваемое значение мамы), составляя содержимое ss.str() == "212213".

Примечание. Вы также должны вызвать W.clear() прежде чем вы W.display() новый кадр (W.display()), а не после.


Предложенное решение

Перед добавлением новых данных очистите содержимое строкового потока, это можно сделать с помощью ss.str(""):

if(e.key.code == sf::Keyboard::Up){
   ss.str ("");               // set contents to that of an empty string
   mama++;
   ss << mama;                // insert new data
   text.setString(ss.str());
 }

Если вы пишете С++ 11, все процессы можно упростить, используя std::to_string, как std::to_string ниже:

if(e.key.code == sf::Keyboard::Up){
   text.setString(std::to_string (mama));
 }
  • 0
    чередующийся Решение: создать объект локального потока.
  • 0
    Большое спасибо, я не понял это. Большое спасибо, парень.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню