java - 这会降低帧率吗?

标签 java timing frame-rate

我正在制作一个游戏,要求它至少有30FPS并且不能低于。我下面的内容可以实现这一点吗?或者我去哪儿了?非常感谢您的帮助。

private long period = 6 * 1000000;
private static final int DELAYS_BEFORE_YIELD = 5;
long before, after, difference, sleep, oversleep = 0;
int delays = 0;
while (running)
{
    before = System.nanoTime();
    after = System.nanoTime();
    difference = after - before;
        if (sleep < period && sleep > 0)
    {
    try
    {
        Thread.sleep(sleep / 35000L);
        oversleep = 0;
    }
    catch (InterruptedException e)
    {

    }
    }
    else if (difference > period)
    {
    oversleep = difference - period;
    }
    else if (++delays >= DELAYS_BEFORE_YIELD)
    {
    Thread.yield();
    oversleep = 0;
    delays = 0;
    }
    else
    {
    oversleep = 0;
    }
}

最佳答案

您可以设置帧速率的上限,但不能设置保证始终遵循的下限。

您可以使函数每秒调用次数不超过 30 次,但您不能确定它每秒调用次数至少为 30 次。在 30 fps 下,您将在线程之间分配 0.03 秒的时间,通常绘图线程是所有线程中最重的(除非您有像 AI 或其他什么的复杂操作,但这应该通过降低它们的速率或预先计算可以解决的问题)被预先计算)。

如果绘制时间+逻辑时间> 0.03那么就无法让你的游戏至少以30fps运行。

关于java - 这会降低帧率吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13793714/

相关文章:

java - 模板生成器 : better suggestion needed

php - 测量 PHP 脚本的时间 - 使用 $_SERVER ['REQUEST_TIME' ]

c# - 将服务与计时器同步

java - 如何跨互联网进行分组编程

camera - 用于请求摄像头当前 FPS 的 RTSP 命令

java - Liferay : How to get user profilePicURL without ThemeDisplay in serviceImpl classes?

java - 写入文件时附加 JSONObjects

java - 为什么不能使用 ExceptionInInitializerError 调用 initCause ?

jsf - 如何在页面上呈现 JSF 阶段计时

video - libavcodec 获取视频时长和帧率