SFML community forums

Help => System => Topic started by: Dosia on May 21, 2012, 08:46:32 pm

Title: [SFML 2.0 RC] Mouse and moving sprite
Post by: Dosia on May 21, 2012, 08:46:32 pm
Hey, I have a strange problem. When I am moving a cursor on the sfml window and try move a sprite it is moving faster than when i am not moving a cursor. When cursor isnt in window area, sprite is moving slower too. I thought that is something wrong with my code, but I have made a test in clear project and I have still this problem.

Somebody know what is it or could check it on his computer?

#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
 int main()
 {
     sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
         sf::Texture tex;
         tex.create(10,30);
         sf::Sprite sprite;
         sprite.setColor(sf::Color::Green);
         sprite.setTexture(tex);
         sprite.setPosition(200,100);
     while (window.isOpen())
     {
         sf::Event Event;
         while (window.pollEvent(Event))
         {
             if (Event.type == sf::Event::Closed)
                 window.close();
                         if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                                 sprite.move(-10,0);
                         if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                                 sprite.move(10,0);
                         if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                                 sprite.move(0,-10);
                         if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                                 sprite.move(0,10);
                 }
                 window.clear(sf::Color::White);
         window.draw(sprite);
         window.display();
     }
     return EXIT_SUCCESS;
 }
 

Sprite isnt drawing correctly, I saw two small rectangles, but i should see one big. In main project I dont have this problem (probably it is fault my integrated graphics card).

Thank you for sharing with me your time.
Title: Re: [SFML 2.0 RC] Mouse and moving sprite
Post by: Perde on May 21, 2012, 09:19:53 pm
I haven't directly worked with SFML in quite a while, so I'm merely guessing.

sf::Keyboard works outside of whether an event occured or not, but you're processing it inside the event loop.

So basically this is what happens:
You Press left key and the program enters the event-loop. The sprite is moved.
When you move the mouse additionally that counts as different event, so the the loop is being run through another time. Since isKeyPressed will return true this time as well (since it's not linked to events) the sprite will be moved more often.

Long story short. Use sf::Event::KeyPressed or what it's called (check the doc).

Hope this helps.

[edit]
Also there's cpp tags in the forum, you should use them instead.
Title: Re: [SFML 2.0 RC] Mouse and moving sprite
Post by: Dosia on May 21, 2012, 09:31:27 pm
I am really grateful. I used sf::Event to this, but when I pressed left and up together sprite is moving only in one direction. I put this functions behind loop and it is ok, sprite is moving in more than one direction and I do not have change in speed. Stupid mistake, but it is the worst kind of mistakes.

Thanks for help.
Title: Re: [SFML 2.0 RC] Mouse and moving sprite
Post by: Perde on May 21, 2012, 09:35:05 pm
Just realized using Event::KeyPressed would probably result in a one-time movement anyway. Just another guess though. I should really start working with it again before continuing replying to threads here.  ;D
Title: Re: [SFML 2.0 RC] Mouse and moving sprite
Post by: Celtic Minstrel on June 26, 2012, 02:07:08 am
No, key repeat is enabled by default, so you'd continue to get KeyPressed events until you released the key.

EDIT: Argh, I got confused and bumped up an old post. Sorry!