2

私は通常、次のようなメインの「while」ループを使用して、Java で (小さめの) ゲームを作成します。

while(running) {
    time = getTime();
    if(time - oldTime > 0.01) {
        tick(time - oldTime);
        oldTime = getTime();
    } 
}

これは、プログラムの 1 秒あたりのフレーム数を最大にするために行っていますが、Thread.sleep を使用すると他のスレッドを実行できると聞きました。コンピューター上の他のスレッドを許可するには、Thread.sleep(1) (またはその他の低いミリ秒数) を追加する必要がありますか? これは、パフォーマンスよりも優れたプログラミングの実践の問題であり、実際に必要というわけではありませんが、私は信頼できる貪欲でないプログラムを作成するのが好きです。

4

2 に答える 2

4

いいえ、これを行う必要はありません。

最新のプリエンプティブ マルチタスキング システムはすべて、他のスレッドに時間を割り当てて実行できるようにします。sleep()一定期間、他のスレッドに制御を強制的に放棄したい場合を除き、これに対応する必要はありません。

これを行う必要があるのは、マルチコア システムのすべてのコアを占有していて、長時間実行される計算集約型のタスクをバックグラウンドで静かに完了させたい場合であり、実行中の他の操作に目に見える影響を与えることはありません。同時に。

于 2012-06-30T22:48:37.747 に答える
4

Timerを使用してグラフィックを更新するゲームの構築に成功しました。メリットについては、こちらをご覧ください。一般的には、Robertの言うとおりです。これを行う必要はありません。私は通常、他のプロセスに優しくすることではなく、ゲーム アニメーション FPS のスイート スポット int を見つけることに帰着することを発見しました。

于 2012-06-30T22:53:39.113 に答える