gpt4 book ai didi

animation - 限制帧速率时对象移动不连贯

转载 作者:行者123 更新时间:2023-12-02 04:13:23 25 4
gpt4 key购买 nike

我一直在游戏中物体的不稳定运动遇到一些麻烦。

如果帧速率没有上限,则游戏运行流畅。

如果我将帧速率限制为 60 fps,则运动是不稳定的。

物体的运动是这样的……

m_distance += m_speed * GetFrameTime()

其中速度以每秒像素为单位,GetFrameTime() 返回自上一帧以来耗时。请注意,对象仅在 x 和 y 方向上移动。

我正在使用 SFML,功能为 SetFramerateLimit(60)UseVerticalSync(true) .在尝试解决不稳定的运动问题时,我阅读了 XNA 开发人员的一篇文章,内容是他们如何更新一次、渲染一次,然后如果游戏循环中剩余的时间 < 帧速率(即 1/60)那么他们在那段时间剩下的时间里我都会 sleep 。我相信这就是 SFML 所做的,因为我禁用了这些功能并在该行为中写入,我得到了相同的症状。

现在我并不是说上述方法是一件坏事。事实上,我喜欢该应用程序没有做不必要的工作(在使用设置的帧限制和没有设置帧限制运行应用程序时,资源使用情况存在显着差异)。但是,我真的不知道为什么运动是波涛汹涌的。我已经阅读了 gafferongames 文章,但它们似乎不适用于这里。

任何帮助表示赞赏,谢谢。

编辑:我已经确定了问题,现在只是不知道如何解决它。

在对象“跳跃”的帧上,m_distance 明显大于其他帧中的距离。仔细观察,GetFrameTime() 也显着大于帧之间的先前时间(显着差异为 2-3 毫秒)。

Edit2:我相信我已经想出了一个解决方案,感谢 http://gafferongames.com/game-physics/fix-your-timestep/ .设置一个固定的增量时间,而不是使用 GetFrameTime。

最佳答案

使用的唯一原因:

m_distance += m_speed * GetFrameTime();

是如果你想获得独立于框架的运动。在这种情况下,没有理由限制您的 FPS。

当您有 FPS 上限(例如 SFML 实现的)时,我建议保持每帧的移动不变。也就是说,像这样:
m_distance += m_speed;

关于animation - 限制帧速率时对象移动不连贯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3939215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com