私はJavaでゼロからゲームエンジンを構築する実験をしており、いくつか質問があります。私のメインゲームループは次のようになります。
int FPS = 60;
while(isRunning){
/* Current time, before frame update */
long time = System.currentTimeMillis();
update();
draw();
/* How long each frame should last - time it took for one frame */
long delay = (1000 / FPS) - (System.currentTimeMillis() - time);
if(delay > 0){
try{
Thread.sleep(delay);
}catch(Exception e){};
}
}
ご覧のとおり、フレームレートを60FPSに設定していdelay
ます。これは計算に使用されます。遅延により、各フレームが次のフレームをレンダリングする前に同じ時間かかることが保証されます。私のupdate()
関数x++
では、次のように描画するグラフィックスオブジェクトの水平方向の値を増加させています。
bbg.drawOval(x,40,20,20);
私を混乱させるのはスピードです。FPS
150 に設定すると、レンダリングされた円は速度を非常に速く通過しますがFPS
、30に設定すると、画面を半分の速度で移動します。フレームレートは、レンダリングの「滑らかさ」だけに影響し、レンダリングされるオブジェクトの速度には影響しませんか?大部分が欠けていると思いますが、説明が必要です。
1000 / FPS
除算が行われ、ループの前に結果が変数に割り当てられwhile(isRunning)
ます。これは、何回か無駄に何かを行うためのいくつかのCPU命令を節約するのに役立ちます。