我在 SFML C++ 中创建了一个小程序,我希望在其中移动一个对象。但我的问题是移动速度不是恒定的,有时速度随机下降并且移动一点也不流畅。 视频链接 如果你仔细观察,速度不是恒定的 我的源代码
#include <SFML/Graphics.hpp>
#include <iostream>
// 10^6
int main()
{
float dx = 0.000001;
float dy = 0.03;
int w = 720;
int h = 480;
sf::RenderWindow window(sf::VideoMode(w, h), "Sf Test");
sf::CircleShape r1(20);
r1.setFillColor(sf::Color(250, 0, 0));
sf::Vector2f objPos(0.0, 0.0);
r1.setOrigin(objPos);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
{
window.close();
}
}
if (r1.getPosition().y > h || r1.getPosition().y < 0)
{
dy *= -1;
}
objPos.y += dy;
r1.setPosition(objPos);
// std::cout << r1.getPosition().y << std::endl;
window.clear();
window.draw(r1);
window.display();
}
}
谁能告诉我如何停止这种行为以及如何使移动速度平稳。
由于您无法控制系统何时安排/取消安排您的代码执行,因此您需要在增量计算中加入时间元素。 所以,
objPos.y += ( speedY * deltaTime );
您需要计算循环到循环的“deltaTime”。 'deltaTime' 将是自上次循环发生以来的时间。您可以使用 sf::Clock 类并处理“getElapsedTime()”。