【问题标题】:How do I move an object on the screen slowly? [closed]如何缓慢移动屏幕上的对象? [关闭]
【发布时间】:2014-11-29 14:53:10
【问题描述】:

在我的主游戏循环中,我使用调用obj.move(1, 0) 将对象向右移动,但它移动得非常快,因为它处于循环中。我怎样才能把它减慢到一定的速度?

while (window.isOpen())
{
    // ...
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
        object.move(1, 0);
}

【问题讨论】:

  • 最简单但可能最不理想的解决方案是在帧之间调用睡眠函数。您应该包含代码的最小示例,以便提供适当的解决方案。
  • 如果你想保持可变帧率,请将1 替换为1.0 / deltaTime

标签: c++ sfml


【解决方案1】:

测量每一帧的经过时间(以毫秒为单位),即delta,并将其累积在一个控制动画(每个对象)的变量中。然后将您的object.move 包装在一个条件中,以检查其总经过时间是否大于某个量,例如 30 毫秒。这将导致每秒大约 33 次移动 - 这看起来像是一个平稳的移动,不太快也不太慢。

【讨论】:

  • 何时停止检查经过时间以确定 delta 的值?
  • delta(或dt)是在上一个帧上花费的时间。您在每一帧结束时更新它,并将其添加到您对动画感兴趣的每个对象的dt_accum。当对象的dt_accum >= 30时,移动对象并做dt_accum -= 30,这样对象只有在再次dt_accum >= 30时才会移动。如果您想在某个时候停止移动对象,请使用标志和/或停止更新其dt_accum
猜你喜欢
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 2015-01-22
相关资源
最近更新 更多