C++ 如何将文本的宽度设置回0,以便我可以使用它?
出于某种原因,在第一行之后,每当按下一个键,我的文本就会不断地添加新行。我不知道如何修复它,我尝试了各种方法,但仍然不起作用 以下是我目前的代码:C++ 如何将文本的宽度设置回0,以便我可以使用它?,c++,text,sfml,word-wrap,C++,Text,Sfml,Word Wrap,出于某种原因,在第一行之后,每当按下一个键,我的文本就会不断地添加新行。我不知道如何修复它,我尝试了各种方法,但仍然不起作用 以下是我目前的代码: #include <SFML\Graphics.hpp> #include <iostream> #include <string> #include <ctime> #include<cstdlib> using namespace std; int main() { sf::
#include <SFML\Graphics.hpp>
#include <iostream>
#include <string>
#include <ctime>
#include<cstdlib>
using namespace std;
int main()
{
sf::Vector2i screenDimensions(800, 600);
sf::Vector2i blockDimensions(10, 10);
sf::RenderWindow window(sf::VideoMode( screenDimensions.x, screenDimensions.y), "SFML Tutorial", sf::Style::Close | sf::Style::Titlebar);
//window.setKeyRepeatEnabled(false);
sf::Font font;
if (!font.loadFromFile("OCRAStd.otf"))
{
cout << "Can't find the font file" << endl;
}
sf::String sentence;
sf::Text text(sentence, font, 40);
//for font style such as Bold, Underline, and Italicized
text.setStyle(sf::Text::Bold | sf::Text::Underlined);
text.setFillColor(sf::Color(44, 127, 255));
text.setOutlineColor(sf::Color(44, 127, 255));
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
case(sf::Event::Closed):
window.close();
break;
case(sf::Event::KeyPressed) :
if (event.key.code == sf::Keyboard::Escape)
window.close();
break;
case sf::Event::TextEntered:
int width = text.getGlobalBounds().width;
if (width >= screenDimensions.x)
{
sentence.insert(sentence.getSize(), "\n");
width = 0;
}
if (event.text.unicode >= 32 && event.text.unicode <= 126)
sentence += (char)event.text.unicode;
else if (event.text.unicode == 8 && sentence.getSize() > 0)
sentence.erase(sentence.getSize() - 1, sentence.getSize());
text.setString(sentence);
break;
}
}
window.draw(text);
window.display();
window.clear();
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
矢量2i屏幕尺寸(800600);
sf::Vector2i区块维度(10,10);
sf::RenderWindow窗口(sf::VideoMode(screenDimensions.x,screenDimensions.y),“SFML教程”,sf::Style::Close | sf::Style::Titlebar);
//window.setKeyRepeatEnabled(假);
sf::字体;
如果(!font.loadFromFile(“OCRAStd.otf”))
{
cout=32&&event.text.0)
crease(句子.getSize()-1,句子.getSize());
text.setString(句子);
打破
}
}
窗口。绘制(文本);
window.display();
window.clear();
}
返回0;
}
这是因为一旦文本到达窗口的一侧,它就已经足够宽,可以触发if语句,在每次按键时添加换行符
case sf::Event::TextEntered:
if (event.text.unicode >= 32 && event.text.unicode <= 126)
sentence += (char)event.text.unicode;
else if (event.text.unicode == 8 && sentence.getSize() > 0)
sentence.erase(sentence.getSize() - 1, sentence.getSize());
text.setString(sentence);
if (text.getGlobalBounds().width > screenDimensions.x)
{
sentence.insert(sentence.getSize() - 1, "\n");
text.setString(sentence);
}
break;
案例sf::事件::文本输入:
如果(event.text.unicode>=32&&event.text.unicode 0)
crease(句子.getSize()-1,句子.getSize());
text.setString(句子);
if(text.getGlobalBounds().width>screenDimensions.x)
{
语句.insert(语句.getSize()-1,“\n”);
text.setString(句子);
}
打破
这段代码在文本中插入新字符,然后检查是否超出了边界。如果是这样,它会在新添加的字符之前插入一个换行符