如何将文本的宽度设置回 0,以便我可以废话

How to set the width of my text back to 0 so that I can crapit?

本文关键字:我可以 设置 文本      更新时间:2023-10-16

出于某种原因,在第一行之后,每当按下某个键时,我的文本都会不断添加新行。我不确定如何解决它,我已经尝试了各种方法,但它仍然不起作用。

这是我到目前为止的代码:

#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;

这段代码在文本中插入新字符,然后检查是否超出边界。如果是这样,它会在新添加的字符之前插入换行符。