2016-09-24 1 views
0

これは少しテキストベースの冒険を作っており、現在は自分の入力を継続的にチェックしているので、現在CPUの約45%〜50%を食べています。だから私はフレームレート/更新レートを制限するいくつかの種類の方法が必要です。私は、プレイヤーの入力をチェックしているループにthread.sleep(15)を入れようとすると、渡された入力で何もしないようにします。同様の質問が出てきましたが、答えはレンダリングメソッドが実際にあるゲームにのみ適用され、jtextareasとjtextfeildsを使用するとレンダリングメソッドは必要ありません。したがって、提供されるソリューションは私のためには機能しません。助けて?jframeでリミットフレームレート

答えて

0

Thread.sleepは現在のスレッドを完全に一時停止します。thread.sleepを使用すると、スレッドで何も起きないようにします。したがって、入力は検出されません。ここでは、レンダリング更新部分を削除するために修正したゲームループを示します。また、(真の)メソッドは非常に遅く、一般的には推奨されません。

このループを有効にするには、このループを呼び出すことができます。

public static void main(String[] args) { 
    loop(0); 
} 

public static void loop(int looptype) { 
    long lastTime = System.nanoTime(); 
    double ns = 1000000000/60.0; 
    double delta = 0; 
    long timer = System.currentTimeMillis(); 
    while(running) { 
     long now = System.nanoTime(); 
     delta += (now - lastTime)/ns; 
     lastTime = now; 
     while (delta >= 1) { 

      if (looptype == 0) { 
       *something* 
       if (input.equals("1")) { 
        loop(1); 
       } else if (input.equals("2")) { 
        loop(2); 
       } 
      } else if (looptype == 1) loop1(); 
      else if (looptype == 2) loop2(); 

      delta--; 
     } 
     if (System.currentTimeMillis() - timer > 1000) { 
      timer += 1000; 
     } 
    } 
} 

public static void loop1() { 
*something* 
} 

public static void loop2() { 
*something* 
} 
+0

これに伴う問題、私はイムは、単にそれらを追加し、jtextareasとjtextfeildsを使用してイムとしての私のJFrameを再描画するための方法を持っていけないされて、私はそう行くように、私は方法 – xlis1

+0

をレンダリング私はレンダリングを処分したのいずれかの種類を実行するカント部分的に、tickメソッドに入力コードを入れることができるはずです。これで修正されますか? – codedcosmos

+0

私は何をやっているのか正確にはわかりません。プレイヤーが入力を入力できるjtextfeildを持っています。この値を変数に書き込み、プレイヤーの在庫と統計パネルを更新するjbuttonを持っています。プレーヤーの入力をいくつかの値と照らし合わせてチェックします。私はこれがひどく非効率的であることを認識しています。なぜここでは少なくとも管理しやすいレベルにしようとしていますが、システム全体を書き直す必要があるようです。または私はティック()を結ぶことができます。何らかの形でサブミットアクションに入る?知りません。 – xlis1