2017-12-25 21 views
-6

私は与えられたメソッドを1秒間にX回(例えば毎秒30回)実行するタスクを持っています。そのチックメソッド内で、私は現在の速度を表示する必要があります(基本的にFPSを表示)。メソッドをJavaで1秒間にX回実行する

私は始める方法も知らない。試してグーグルが、実際には役に立たなかった。 「FPS」のようなものを表示するには

+0

これは広すぎます。あなたは既にゲームループを持っていますか?メソッドをX回呼び出すことは、「現在の速度/ FPS」を表示することとは異なります。これらは基本的に反対です。 – luk2302

+0

これは私が持っているすべての情報です。文字通り「指定された時間間隔(例30回/秒)で任意のメソッドを実行するプログラムを作成します。メソッドは実行の現在の速度(1秒あたりのフレーム数)を表示する必要があります –

+0

あなたが探しているメソッド['System.currentTimeMillis()'](https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis--)、および '' Thread.sleep(long millis) '](https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#sleep-long-)**割り当てを完了するには、あなた次第ですこれらの方法の使い方を理解する--- http://idownvotedbecau.se/noattempt/あなたはあなたがそれを完了するために必要なツールについて学ぶことなくこの課題を持っている可能性は低いので、おそらくあなたは(再)教材。 – Andreas

答えて

0

public static void main(String[] args) { 
    while (true) callMethod(); 
} 

private static long lastTime = System.currentTimeMillis(); 
public static void callMethod() { 
    long now = System.currentTimeMillis(); 
    long last = lastTime; 
    lastTime = now; 

    double fps = 1000/(double)(now - last); 
    System.out.println(fps); 
} 

次の2つのステップの間にそれ以外の差があまりにも小さいので、FPSは「インフィニティ」になり、いくつかのスリープを追加する必要があります。

1秒あたり30回の要件は全く異なるものです。私が私のコメントで言いましたように、これは基本的にfpsの正反対です.30回目は正確に30fpsを意味します。これはfpsを計算する必要がないということです。

自体で「1秒間に30回は」少なくとも2つの理由のため、一般的に悪い条件であることをさらに注記:

  • で1000倍秒大丈夫?それは要求を満たすか
  • は、最初のミリ秒で30回の方法を実行していて、残りの999msが問題を解決するのを待っていますか?
+0

これはまさに実行されたはずのことです。材料はより良い、それはむしろ簡単な解決策です。ありがとう –

+0

これはFPSではありません。それはちょうど1つの「フレーム」の実行時間です。 – VGR

+0

@VGRもちろんfpsではなく、関連するフレームもありません。しかし、これは私がOPが必要と思うものであり、わずかな用語を無視している – luk2302

関連する問題