屏幕没有清除最后一个文本为什么?

时间:2014-06-11 18:45:47

标签: c++ sfml

屏幕上的文字没有被替换为什么?

#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个数字,并且它没有清除它。你能帮助我吗?我不善于解释。

1 个答案:

答案 0 :(得分:3)

解释

在插入新数据之前,您需要清除std::stringstream ss的内容。

目前的情况是你首先插入“212”( mama ),然后插入“213”(增加值为 mama ),制作内容ss.str () == "212213"

注意:您还应该在之前调用{/ 1>} 来呈现新框架(W.clear ()),而不是之后。


提议的解决方案

在插入新数据之前清除 stringstream 的内容,可以使用ss.str ("")完成:

W.display ()

如果您正在编写 C ++ 11 ,可以使用std::to_string简化整个过程,如下所示:

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());
 }