Движение объекта в SFML
Почему не двигается объект при нажатии клавиши? Я так понял, потому что уже отрисован один объект, и при движении уже отрисовывается другое его местоположение, но при этом старое остается, как это исправить?
#include <SFML/Graphics.hpp>
using namespace sf;
int main()
{
ContextSettings settings;
settings.antialiasingLevel = 8;
// Объект, который, собственно, является главным окном приложения
RenderWindow window(VideoMode(600, 600), "SFML Works!", Style::Default, settings);
while (window.isOpen())
{
Event event;
while (window.pollEvent(event))
{
if (event.type == Event::Closed)
window.close();
}
window.clear(Color(250, 220, 100, 0));
RectangleShape board(Vector2f(120.f, 15.f));
board.move(240.f, 585.f);
board.setFillColor(Color::Black);
window.draw(board);
if (Keyboard::isKeyPressed(Keyboard::Left)) {
board.move(-3.f, 0.f);
window.draw(board);
}
window.display();
}
return 0;
}
Ответы (1 шт):
Автор решения: kolyshek
→ Ссылка
Пожалуйста. Рабочий вариант. Если есть вопросы то спрашивай.) Хотя я немного опоздал с ответом...
int main()
{
sf::ContextSettings settings;
settings.antialiasingLevel = 8;
// Объект, который, собственно, является главным окном приложения
sf::RenderWindow window(sf::VideoMode(600, 600), "SFML Works!", sf::Style::Default, settings);
sf::RectangleShape board(sf::Vector2f(120.f, 15.f));
board.setFillColor(sf::Color::Black);
board.setOrigin(sf::Vector2f(board.getSize().x / 2, board.getSize().y / 2));
board.setPosition(sf::Vector2f(static_cast<float>(window.getSize().x / 2),
static_cast<float>(window.getSize().y - 10.0f)));
sf::Clock* clock = new sf::Clock;
float dT;
float speed = 300;
while (window.isOpen())
{
dT = clock->restart().asSeconds();
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A) || sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
board.move(-1.0f * dT * speed, 0.0f);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::D) || sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Right))
board.move(1.0f * dT * speed, 0.0f);
}
window.clear(sf::Color(250, 220, 100, 0));
window.draw(board);
window.display();
}
}