我们如何处理SFML / C ++中的时间?

时间:2014-01-03 02:43:17

标签: c++ sfml

我正在使用带有C ++的SFML 2.1。我想知道我们如何能够延迟处理玩家的动作,例如:

if(right-key-is-pressed)
{
    player.move(5, 0);
}

现在我们希望玩家移动到5个空格,但我们希望它需要2秒才能完成。

我们如何在SFML中完成它?

3 个答案:

答案 0 :(得分:0)

您必须使用sf :: clock才能为游戏计时。

http://www.sfml-dev.org/documentation/2.1-fr/classsf_1_1Clock.php

答案 1 :(得分:0)

 int main()
 {
 sf::Clock Clock;
 float LastTime = 0;

 //Main Game Loop
 while(Window.isOpen())
 {
 /* ... */
 float CurTime = Clock.restart().asSeconds();
 float FPS = 1.0 / CurTime;
 LastTime = CurTime;

 /*Then you could multiply the objects move axis speed by FPS*/
 Player->Shape.move(Vel.x * FPS, Vel.y * FPS);

 Window.clear();

 Window.display();
 }
 return 0
 }    

因为CurTime = Clock.restart()。asSeconds();您可能(很可能)必须显着增加对象速度的值。

答案 2 :(得分:0)

这样做的一种方法是引入框架的概念。每秒可以有几个帧,比如说60帧。每个帧都是对象在该秒内给定时间点的状态快照。您计算新帧中对象的状态,然后在该时间点在屏幕上渲染并显示它,并继续计算帧。

在你的例子中,假设我每秒可以有10帧。播放器的速度为5/2单位/秒。我将计算玩家状态,并且玩家在0.1秒时为0.25,在0.2秒时为0.5,在0.3秒时为0.75,等等。