SMFL Bewegen eines Objects



  • Hallo,

    Habe gerade erst begonnen SMFL zu benutzen und habe mein erstes "Shape" gezeichnet ein Viereck, mit folgendem Code:

    sf::Shape movingObject = sf::Shape::Rectangle(0, 0, 50, 50, sf::Color::White);
        float fCurrentX = 0, fCurrentY = 0;
        float fSpeed = 0.00005f;
    

    Danach bewege ich mein Objekt im "Event-Loop:", falls eine Taste gedrückt wird.

    while (window.IsOpened()) {
            while (window.GetEvent(event)) {
                if (event.Type == sf::Event::Closed)
                    window.Close();
                else if (event.Type == sf::Event::KeyPressed) {
                    if (event.Key.Code == sf::Key::Escape)
                        window.Close();
                }
            }
            window.Clear();
    
            const sf::Input& input = window.GetInput();
    
            // MOVEMENT
            if (input.IsKeyDown(sf::Key::Right))
                fCurrentX += fSpeed;
            else if (input.IsKeyDown(sf::Key::Left))
                fCurrentX -= fSpeed;
            else if (input.IsKeyDown(sf::Key::Up))
                fCurrentY -= fSpeed;
            else if (input.IsKeyDown(sf::Key::Down))
                fCurrentY += fSpeed;
    
            movingObject.Move(fCurrentX, fCurrentY);
    
            window.Draw(movingObject);
    
            window.Display();
        }
    

    Mein Viereck bewegt sich zwar, jedoch hört es nicht auf sich zu bewegen, nachdem ich z.B kurz die Rechte Taste gedrückt habe... langsam bewegt es sich so weit nach Rechts bis es aus dem Fenster verschwindet.

    Seht ihr vielleicht einen Fehler? Mache ich einen groben Denkfehler, oder wo liegt das Problem?

    Dankeschön,

    samyboy



  • Je nach Schnelligkeit wird durch das Double Buffering die Funktion n-mal pro Zeiteinheit aufgerufen. Dasselbe gilt dann also auch für movingObject.Move(), von daher kann es nur an der Methode liegen. Zeig die mal her.

    Nebenbei:
    Warum wird dein Objekt nach rechts verschoben, wenn man die untere Pfeiltaste drückt? 😃



  • Kóyaánasqatsi schrieb:

    Warum wird dein Objekt nach rechts verschoben, wenn man die untere Pfeiltaste drückt? 😃

    Wird es doch gar nicht oO?? xD

    Ich guck mir das mal an und poste wieder, danke für die schnelle Antwort! 😃



  • Achso lol, habe beim überfliegen nur:

    if (input.IsKeyDown)
    

    gelesen. Jo doch, dann passt das.



  • Setze fCurrentX und fCurrentY jedes Frame wieder auf Null zurück, bevor du neue Werte addierst.

    Und die Ungarische Notation (betrifft dein "f"-Präfix für float ) würde ich mir in C++ ehrlich gesagt abgewöhnen. Für Argumente kannst du hier vorbeischauen. 🙂


Anmelden zum Antworten