屏幕上的文字没有被替换为什么?
#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个数字,并且它没有清除它。你能帮助我吗?我不善于解释。
答案 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());
}