如何将文本的宽度设置回 0,以便我可以废话
How to set the width of my text back to 0 so that I can crapit?
出于某种原因,在第一行之后,每当按下某个键时,我的文本都会不断添加新行。我不确定如何解决它,我已经尝试了各种方法,但它仍然不起作用。
这是我到目前为止的代码:
#include <SFMLGraphics.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;
}
这是因为一旦文本到达窗口一侧,它就已经足够宽,可以触发每次按键时添加换行符的 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;
这段代码在文本中插入新字符,然后检查是否超出边界。如果是这样,它会在新添加的字符之前插入换行符。
相关文章:
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 我可以对 2 个或更多应用程序进行 QSettings 设置吗?
- 我可以检查初始化列表中设置的构造函数主体中的变量吗
- 我可以通过设置工具链文件来替换调用 cmake -G<generator> 选项和调用 vcvarsall.bat吗?
- 我可以强制 QFileDialog 使用系统区域设置而不是系统语言吗?
- 浏览器将随机HTTP消息正文发送到我的boost.asio服务器.我可以更改此设置吗?
- 调用该方法时,我可以设置类实例
- 我可以在 c++ 中正确设置 std::vector by operator[] 的第 n 个值吗?
- 如何将文本的宽度设置回 0,以便我可以废话
- 我可以编程设置ENV使用BAT,然后发出一个过程
- 我可以设置例如数组[n+k] = 数组[0]吗?
- 有人可以给我一个设置和检索unique_ptr的简单示例吗?
- 我可以在 HWND 上设置标签吗?
- 我可以为并集的C++函数设置默认参数吗
- Kinect v2,我可以设置跟踪哪两个人吗
- 我可以设置一个比特序列而不取消之前的值吗?
- 我可以设置visual studio 2005命令行开关在我的代码(即通过pragma/define)
- 我可以设置ostream分隔符吗?
- 我可以设置预定义的用户输入值,而在visual studio调试
- 为什么我可以设置数组范围之外的值?