2017-10-13 8 views
0

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

コアでは、これはスレッドの問題です。あなたのゲームのためのすべての計算を行うために(少なくとも)1つのスレッドを使用し、レンダリングするために別のスレッドを使用します。つまり、レンダリングサイクルはバックグラウンド処理とは独立しているため、それらの処理を遅くすることはできません。

+0

私はスレッドの作成について学んだことはありませんでした。これを行う方法についてのチュートリアルを見つけることができます。ありがとうございます。 – enheldel

+0

確かです。私の答えが助けられたら、それを覚えておいてください – Igor

関連する問題