0

我正在制作一个游戏,要求是让它至少有 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;
    }
}
4

2 回答 2

2

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

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

如果time of draw + time of logic > 0.03那样的话,就没有办法让你的游戏至少以 30fps 的速度运行。

于 2012-12-10T01:29:26.310 回答
0

很好,你早点问,因为我认为最好使用计时器。这把事情从里到外。(不过也可以按照你的方式进行。)

很抱歉这个没有答案,但我认为这是一个有价值的建议。

为他们的方法研究一些游戏/动画框架。

于 2012-12-10T01:24:44.883 回答