我正在制作一个游戏,要求是使其至少具有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.03s的时间,通常绘图是它们之间最重的时间(除非您执行复杂的操作(如AI或其他操作),但应通过降低其速率或预先计算可解决的问题来解决)预先计算)。

如果time of draw + time of logic > 0.03,则无法使游戏至少以30fps的速度运行。

09-28 12:36