gpt4 book ai didi

c++ - 在 SFML 中超出窗口边界时将光标发送到新行?

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:43 26 4
gpt4 key购买 nike

我想知道当我在 SFML 中超出窗口宽度边界时,是否有任何方法可以将我正在键入的文本行移动到下一行?我是 SFML 的新手,但我无法理解它。在过去的三个小时里,我已经尝试了其中的很大一部分,但它移动到一条新线,然后卡在一条线上,我无法对它做任何事情。有任何想法吗?这是我的代码。

    #include <SFML/Graphics.hpp>
#include <iostream>
#include <string>
int main(){
srand(time(0));
sf::Vector2i screenDimensions(800, 600);

sf::RenderWindow window(sf::VideoMode(screenDimensions.x, screenDimensions.y), "My First SFML Game");

sf::Texture pTexture;
sf::Sprite playerImage;

if (!pTexture.loadFromFile("Player.png"))
window.setTitle("Couldn't load player image!");

playerImage.setTexture(pTexture);

sf::Font font;
if (!font.loadFromFile("Sitka.ttc"))
window.setTitle("Oops!");

sf::String string;
sf::Text text(string, font, 40);
text.setColor(sf::Color(44, 127, 255));
text.setStyle(sf::Text::Bold | sf::Text::Underlined);
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:
if (event.text.unicode >= 32 && event.text.unicode <= 126) {
string += event.text.unicode;
}
else if (event.text.unicode == 8 && string.getSize() > 0)
string.erase(string.getSize() - 1, 1);
text.setString(string);

if (text.getLocalBounds().width > 800) {
if (event.text.unicode >= 32 && event.text.unicode <= 126) {
string.clear();
string += "\n";
string += event.text.unicode;
text.setString(string);
}
else if (event.text.unicode == 8 && string.getSize() > 0)
string.erase(string.getSize() - 1, 1);

}
}
}
}

window.draw(text);
window.display();
window.clear();
}
}

最佳答案

你的问题是 "sf::String::clear()" 删除了整个字符串。但您只想删除字符串的最后一个字符。

为此,std::string(和 sf::String)有一个成员函数“erase()”。使用删除,您可以简单地从字符串中删除一个字符。您想要删除位于 "string.getSize() - 1" 位置的最后一个字符,因此只需将行 "string.clear();" 更改为“string.erase(string.getSize() - 1);” 一切正常。

关于c++ - 在 SFML 中超出窗口边界时将光标发送到新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29308057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com