C++ sfml 2.0中经过的速度和时间

C++ sfml 2.0中经过的速度和时间,c++,character,velocity,sfml,C++,Character,Velocity,Sfml,所以我已经找了好几个小时了,我似乎找不到任何东西来帮助我,所以我会先说我是新的,就像非常新的一样,但我明白为了在不同的帧率下保持恒定的移动速度,我需要结合速度,并确定自循环最后一次迭代以来经过的时间 这就是我目前所知道的 #include <SFML/Graphics.hpp> int main() { sf::RenderWindow window(sf::VideoMode(800, 600, 32), "Oliver Rules!"); float speed = 20.f

所以我已经找了好几个小时了,我似乎找不到任何东西来帮助我,所以我会先说我是新的,就像非常新的一样,但我明白为了在不同的帧率下保持恒定的移动速度,我需要结合速度,并确定自循环最后一次迭代以来经过的时间

这就是我目前所知道的

#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;
}
#包括
int main()
{
sf::RenderWindow窗口(sf::VideoMode(80060032),“奥利弗规则!”;
浮动速度=20.f;
浮动locX=0.f;
浮动locY=0.f;
sf::圆环形圆环(50);
setFillColor(sf::Color(200,40,200));
sf:时钟;
while(window.isOpen())
{
sf::事件;
while(window.pollEvent(事件))
{
如果(event.type==sf::event::Closed)
window.close();
}
sf::Time elapsed1=clock.restart();
如果(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
locX-=速度*elapsed1;
}
如果(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
locX+=0.1;
}
如果(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
locY-=0.1;
}
如果(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
locY+=0.1;
}
设置位置(locX,locY);
circleOne.移动(locX,locY);
window.clear();
窗口绘制(圆圈);
window.display();
}
返回0;
}

我的问题是,我无法添加或减去我启动的变量,以作为我的电路的位置。由于elapsed1是一个浮点数,我无法编辑。因此,我的问题是,如何使其工作?

您的问题是
速度
elapsed1
不是同一类型。一个是
float
,另一个是
sf::Time
。如果希望
locX-=speed*elapsed1
工作,则必须将
elapsed1
转换为
float

为此,您可以使用方法
elapsed1.asSeconds
elapsed1.asmillseconds
elapsed1.asMicroseconds
,具体取决于所需的单位类型


如果你想了解更多,你应该看看。

啊,亲爱的,我想我必须转换过去的时间,但我不知道如何转换,非常感谢:)显然我还不能提高投票率:(但是我不能让它工作这是我投入的,我不认为我在写它,我以前读过文档,我知道我需要做什么,但不知道如何做。虽然我会解决这部分问题:)谢谢堆的帮助。@user2342575好的,那没问题。希望你对SFML 2.0有兴趣:)哈哈,谢谢堆,为了完成它,我得到了它,我没有意识到你必须像这样键入代码:float-appeased=clock.restart().asSeconds();我是这样写的,float-appeased=asSeconds(clock.restart());