我想知道当我在 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/