Как я могу добавить своего рода текстовое поле в SFML, используя ввод с клавиатуры и sf :: Text для отображения строки текста? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь проверить, был ли введен текст, а затем добавить этот текст в конец строки.Мой текущий код:

#include <SFML/Graphics.hpp>

int main(){
sf::RenderWindow window(sf::VideoMode(800,600),"Window", 
sf::Style::Titlebar | sf::Style::Close);
sf::Font arial;
arial.loadFromFile("arial.ttf");
sf::Text t;
t.setFillColor(sf::Color::White);
t.setFont(arial);
std::string s = "This is text that you type: ";
t.setString(s);

while(window.isOpen()){
    sf::Event event;

    while(window.pollEvent(event)){
        if(event.type == sf::Event::Closed){
            window.close();
        }
        if(event.type == sf::Event::TextEntered){
            s.append(std::to_string(event.key.code));
        }
    }
    t.setString(s);
    window.clear(sf::Color::Black);
    window.draw(t);
    window.display();
}
}

Это прекрасно работает, пока я не набрал клавиши, и все, что было отображено, было серией цифр (значения клавиш в ASCII).Как мне сделать мою программу так, чтобы она добавляла значение символа ключа к s вместо значения ASCII?

Надеюсь, я предоставил достаточно информации, чтобы вы могли мне помочь.Любые ответы приветствуются:)

1 Ответ

0 голосов
/ 14 февраля 2019

Документация - ваш друг :-) В случае события TextEntered, event.text "содержит значение Unicode введенного символа. Вы можете поместить его непосредственно в sf::Stringили приведите его к char, убедившись, что он находится в диапазоне ASCII (0–127). "

Нет упоминания члена event.key для события TextEntered, котороепредназначен для события KeyPressed.«Значения ASCII», которые вы видите, вероятно, являются значениями мусора из-за того, что ключевой элемент объединения неактивен и перезаписан другими данными.Также обратите внимание, что std::to_string только преобразует числа в их десятичное представление.

Вот код, который должен работать для вас:

if (event.type == sf::Event::TextEntered){
    if (event.text.unicode < 128){
        s += static_cast<char>(event.text.unicode);
    } else {
        // Time to consider sf::String or some other unicode-capable string
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...