所以我一直在找几个小时,我似乎找不到任何可以帮助我的东西,所以我首先要说我是新人,就像是新人一样,但是我确实知道为了保持恒定的移动速度在不同的帧速率下,我需要合并速度并确定自循环的最后一次迭代以来经过的时间。
所以这就是我到目前为止
#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是浮点数,因此无法进行编辑,所以我的问题是,如何获取此变量上类?
最佳答案
您的问题是speed
和elapsed1
不是同一类型。一个是float
,另一个是sf::Time
。如果您希望locX -= speed * elapsed1
工作,则必须将elapsed1
转换为float
。
为此,可以根据需要的单位类型使用elapsed1.asSeconds
,elapsed1.asMilliseconds
和elapsed1.asMicroseconds
方法。
如果您想进一步了解,请查看SFML 2.0 documentation for sf::Time
。
关于c++ - sfml 2.0中的速度和时间流逝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16335086/