Eingabefeld für Text oder Zahlen mit SFML



  • Hallo,

    ich bin auf der Suche nach einer Möglichkeit, in einem Spiel, dass mit SFML C++ programmiert wird, ein Eingabefeld im Fenster zu erstellen. z. B. für die Eingabe vom Spielernamen oder der Spieler gibt eine Zahl ein, mit der er die Anzahl der Krieger festlegt.

    Könnt ihr mir da Tipps geben?

    Danke



  • Such mal nach "SFML TextBox".



  • leider war nichts brauchbares dabei. Entweder nur ein kurzer Code zum sf::Event::Textentered aber ohne den Hinweis, wie ich das grafisch einbinden kann, oder fertige cpp und hpp codes, die ich auch nicht einbinden kann.

    Ich hatte auf Video auf youtube.com gehofft.

    D.h. weiter suchen!!!



  • Vielleicht ist SFML nicht das richtige!?

    Mein Ziel ist es, dass ein Spieler seine Armee rekrutiert:

    10000 Goldmünzen -> Rekrutierung z.B. Eingabe 500 Schwertkämpfer á 20 Goldmünzen, 520 Axtkämper á 25 Goldmünzen usw. bis die 10000 verbraucht sind.

    Leider habe ich noch keine BOX gefunden, in die ich eine Zahl eingeben kann und diese dann in eine Variable z.B. int AnzahlSchwertkämpfer usw. übergibt.

    In C habe ich das schon programmiert und er funktioniert im DOS-Fenster. Das ist aber nicht schön.



  • Was willst du denn mit einem Video? Du brauchst doch Source-Code. 😕
    Hast du denn nicht SFGUI gefunden? Dort heißt das TextBox-Element "Entry".



  • Wie du bestimmt gemerkt hast, bin ich nicht der Profi und daher helfen mir die Videos um die Erstellung eines Codes besser zu verstehen.



  • TGUI, SFGUI oder selber basteln (geht rel. leicht), ca. so

    class LineEdit : public sf::Drawable, public sf::Transformable {
    public:
        LineEdit(sf::Font& font)
            text{font} { }
    
        void handle_event(const sf::Event& event) {
            // weiß grad nicht mehr genau wie es ging
            if (event.type == sf::Event::TextEntered)
                // an text und str anfügen
        }
    
        virtual void draw(sf::RenderTarget& target, const sf::RenderStates& states) override {
        states.transform *= getTransform();
        target.draw(box, states);
        target.draw(text, states);
    }
    
        std::string text() const { return str; }
    private:
       // optional
       sf::RectangleShape box;
       // oder
       sf::Sprite box;
    
       std::string str;
       sf::Text text;
    };
    

    ist halt ohne schnick schnack wie input masks, placeholder, cursor/Auswahl etc.

    Ein Beispiel für TGUI: https://tgui.eu/examples/0.8/scalable-login-screen/


Log in to reply