1
General / Smoothest possible movement
« on: September 09, 2015, 03:48:32 pm »
I searched for smooth movement, and I found that one simple and good way is to use delta time. I tried it, but my rectangle movement is still lagging(sometimes it momentarily stops). Is there any better way? How does professional 2d games handle movement?
My example code:
My example code:
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(500, 500), "Screen");
sf::Vector2f velocity(0.0f, 0.0f);
sf::Clock clock;
float speed = 200.0f;
sf::RectangleShape player;
player.setSize(sf::Vector2f(30, 30));
player.setFillColor(sf::Color::Blue);
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))
velocity.x = -speed;
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
velocity.x = speed;
else
velocity.x = 0;
float deltaTime = clock.restart().asSeconds();
window.clear();
player.move(velocity.x * deltaTime, velocity.y * deltaTime);
window.draw(player);
window.display();
}
}
int main()
{
sf::RenderWindow window(sf::VideoMode(500, 500), "Screen");
sf::Vector2f velocity(0.0f, 0.0f);
sf::Clock clock;
float speed = 200.0f;
sf::RectangleShape player;
player.setSize(sf::Vector2f(30, 30));
player.setFillColor(sf::Color::Blue);
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))
velocity.x = -speed;
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
velocity.x = speed;
else
velocity.x = 0;
float deltaTime = clock.restart().asSeconds();
window.clear();
player.move(velocity.x * deltaTime, velocity.y * deltaTime);
window.draw(player);
window.display();
}
}