Скорость и время в sfml 2.0

Итак, я искал несколько часов и не могу найти ничего, что могло бы помочь мне с этим, поэтому я начну с того, что я новичок, как совсем новый, но я понимаю, что для того, чтобы иметь постоянную скорость движения при различных частотах кадров мне нужно учитывать скорость и определять время, прошедшее с последней итерации цикла.

Так что это то, что я до сих пор

#include <SFML/Graphics.hpp>

int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600, 32), "Oliver Rules!");

float speed = 20.f;
float locX = 0.f;
float locY = 0.f;

sf::CircleShape circleOne(50);
circleOne.setFillColor(sf::Color(200, 40, 200));

sf::Clock clock;while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}sf::Time elapsed1 = clock.restart();

if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
locX -= speed * elapsed1;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
locX += 0.1;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
locY -= 0.1;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
locY += 0.1;
}circleOne.setPosition(locX, locY);
circleOne.move(locX, locY);window.clear();
window.draw(circleOne);
window.display();
}

return 0;
}

Моя проблема в том, что я не могу добавить или вычесть переменные, которые я инициализировал как местоположение моего круга. Одно не может быть отредактировано из-за того, что elapsed1 является float, я считаю, поэтому мой вопрос, как мне получить это работать?

2

Решение

Ваша проблема в том, что speed а также elapsed1 не того же типа. Один float в то время как другой sf::Time, Если ты хочешь locX -= speed * elapsed1 работать, вам придется преобразовать elapsed1 в float,

Для этого вы можете использовать методы elapsed1.asSeconds, elapsed1.asMilliseconds а также elapsed1.asMicrosecondsв зависимости от типа единиц, которые вы хотите.

Если вы хотите узнать больше об этом, вы должны взглянуть на Документация SFML 2.0 для sf::Time.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]