Java - 使FPS正常工作

问题描述:

我刚刚在Java中做了一个可用的Pong游戏,但是我对于FPS的工作原理有一些疑问。目前,游戏的运行速度与计算机可以处理的速度一样快,如果我在更快的计算机上运行游戏,那么游戏的速度会比平时更快。我解决了这个通过添加一个计时器,以防止游戏运行得太快:Java - 使FPS正常工作

timer = new Timer(5, this); 
timer.start(); 

然而,因为计时器的,在FPS不能超过某一特定的限制无论计算机的运行速度。当FPS下降时,我不希望减慢程序速度,而是希望它像实际的电脑游戏一样“落后”。我该怎么做呢?我想强制游戏以一定的速度运行,因此FPS将下降而不是程序放慢。

我的FPS计数器目前看起来是这样的:

if(System.currentTimeMillis() - time >= 1000){ 
     time = System.currentTimeMillis(); 
     fps = newfps; 
     newfps = 0; 
    } 
    else{ 
     newfps++; 
    } 
    g.setFont(new Font("Arial", Font.BOLD, 25)); 
    g.drawString(fps + "", 5, 22); 

请告诉我,如果我不清楚我的问题。

+0

你是什么意思,“落后”?你想让绘画比游戏运行慢吗? – Igor

+0

如果FPS由于某种原因而下降,我希望程序跳过帧而不是放慢整个程序。我想停止程序放慢速度或运行速度太快。 – enheldel

+0

FPS最终会受到显示硬件的限制。看看在您的游戏中实现VSynch,以便以最佳的速度为您的GPU和显示器渲染数据。另外,请确保您使用的是双缓冲 - https://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html –

它的核心是线程问题。使用(至少)一个线程为您的游戏进行所有计算,并使用另一个线程进行渲染。这意味着渲染周期将独立于后台处理,并且不应该有能力减慢渲染速度。

+0

我从来没有学过关于制作线程,我可以尝试找到一个关于如何做到这一点的教程,谢谢。 – enheldel

+0

当然可以。如果我的答案有帮助,请记住标记它 – Igor