我正在使用带有C ++的SFML 2.1。我想知道我们如何能够延迟处理玩家的动作,例如:
if(right-key-is-pressed)
{
player.move(5, 0);
}
现在我们希望玩家移动到5个空格,但我们希望它需要2秒才能完成。
我们如何在SFML中完成它?
答案 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,等等。