我正在制作一款游戏,其要求是至少要有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;
}
}
答案 0 :(得分:2)
您可以设置帧速率的上限,但不能设置始终遵循的下限。
你可以让一个函数每秒调用不超过30次,但你不能确定每秒至少调用30次。在30 fps时,你有0.03的时间将在你的线程之间分配,通常绘图是最重的(除非你有复杂的操作,如AI或其他什么,但应该通过降低速率或预先计算什么可以解决预先计算好。)
如果time of draw + time of logic > 0.03
,则无法让游戏以至少30fps的速度运行。
答案 1 :(得分:0)
很好,你提前问,因为我认为最好使用计时器。这会把事情弄清楚。 (虽然可以按你的方式完成。)
很抱歉这个不答案,但我认为这是值得的建议。
了解一些游戏/动画框架的方法。