对象速度在 SFML C++ 中随机变化

问题描述 投票:0回答:1

我在 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();
    }
}

谁能告诉我如何停止这种行为以及如何使移动速度平稳。

c++ game-physics sfml game-development
1个回答
0
投票

由于您无法控制系统何时安排/取消安排您的代码执行,因此您需要在增量计算中加入时间元素。 所以,

objPos.y += ( speedY * deltaTime );

您需要计算循环到循环的“deltaTime”。 'deltaTime' 将是自上次循环发生以来的时间。您可以使用 sf::Clock 类并处理“getElapsedTime()”。

© www.soinside.com 2019 - 2024. All rights reserved.