Текст на экране не заменяется почему?
#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 номеров, и это не очистит его. Можете ли вы мне помочь? Я не так хорошо объясняю.
Перед вставкой новых данных вам нужно очистить содержимое ваших 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));
}