【发布时间】:2011-06-02 17:00:05
【问题描述】:
好的,我正在制作一个小游戏,我需要限制我的 FPS,因为当我在我非常快的计算机上玩时,我有大约 850 FPS,游戏会像,非常快,当我切换到我的旧电脑,速度慢了很多,所以我需要限制我的 FPS 才能做到这一点。如何限制我的 FPS? 我的主要游戏循环:
public void startGame(){
initialize();
while(true){
drawScreen();
drawBuffer();
plyMove();
//FPS counter
now=System.currentTimeMillis();
framesCount++;
if(now-framesTimer>1000){
framesTimer=now;
framesCountAvg=framesCount;
framesCount=0;
}
try{
Thread.sleep(14);
}catch(Exception ex){}
}
}
我如何绘制屏幕,以及绘制所有其他事物,球员、球等。 顺便说一句,这款游戏是乒乓球翻拍版。
public void drawBuffer(){
Graphics2D g = buffer.createGraphics();
g.setColor(Color.BLACK);
g.fillRect(0,0,600,500);
g.setColor(Color.GREEN);
g.fillRect(ply1.getX(),ply1.getY(),ply1.getWidth(),ply1.getHeight());
g.setColor(Color.RED);
g.fillRect(ply2.getX(),ply2.getY(),ply2.getWidth(),ply2.getHeight());
g.setColor(Color.WHITE);
g.fillOval(ball1.getX(),ball1.getY(),ball1.getWidth(),ball1.getHeight());
g.drawString("" + framesCountAvg,10,10);
}
public void drawScreen(){
Graphics2D g = (Graphics2D)this.getGraphics();
g.drawImage(buffer,0,0,this);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
【问题讨论】:
-
好吧,如果你的游戏速度取决于 FPS 的数量,那么整个设计就相当...糟糕。
-
除了限制 FPS 之外,您还可以让您的游戏代码真正考虑经过的时间(例如,如果您的 FPS 高,则移动较少,如果 FPS 低,则移动更多)。这可以通过将
System.nanoTime()从实际帧与前一帧的差异来获得。 -
我看过了,但这并没有完全解决我的问题,我不知道如何让它工作
标签: java frame-rate