2017-10-15 17 views
0

私は現在Javaでクラスと継承を研究しています。私は単純なRPGゲームを作った。 今、私はマルチスレッドを使用しようとしますが、動作しません。 30秒ごとに出力が出たいです。 "試合開始から30秒経ちました。"このように。 数字は時間の経過とともに大きくなります。 どうすればよいですか? 実際には、私は英語をうまく話すことができませんし、それは厄介かもしれません。 私はあなたの答えを待っています。ありがとうございました!タイママルチスレッドの使い方

//import java.util.Timer; 
import java.util.TimerTask; 

public class Timer extends Thread { 

    int count = 0; 

    Timer m_timer = new Timer(); 
    TimerTask m_task = new TimerTask() { 

     public void run() { 
      count++; 
      System.out.println("It's been 30 seconds since the game started."); 
     } 

    }; 

    m_timer.schedule(m_task, 1000, 1000); 
}; 

メイン:

public class Main { 

    public static void main(String[] args) { 
     Timer m_timer = new Timer(); 
     m_timer.start(); 
    } 

} 
+1

初めてクラスや継承を勉強しているのなら、初心者にとってはRPGゲームが複雑すぎると思います。なぜマルチスレッドが必要ですか?それは学校の課題の一部ですか? – markspace

+0

** Timer#scheduleは正確で** **正確ではありません。代わりに、 'long start = System.currentTimeMillis();'、 'long current = System.currentTimeMillis;'と 'long duration = current-start;'というハード比較を使用してください。このような制御されていない環境では、並列スレッドを使用しないでください。最初に中心の**ロジック**(しばしば 'tick 'と呼ばれる)と** render **メソッドを使ってウェル構造を整理する必要があります。そこでは、ゲーム時間をカウントして、他の計算をトリガーすることができます。 – Zabuza

+0

はい...学校の割り当て。 私はゲームをあまりにも難しくしませんでした。シンプルなゲーム。 ここにマルチスレッドを追加しています。非常に難しいです....( –

答えて

0

あなたが同時実行についての学習に興味があるなら、あなたがJava Tutorialを読むことによって開始することができます。英語が母国語ではないと言われていますが、それらのチュートリアルのコードに従うことができます。

あなただけの私は、次のコードを提供しますので、簡単な例を実装しようとしているように思える:あなたは、おそらく使用する必要があり、高い精度が必要な場合は他の人が指摘したように

import java.util.Timer; 
import java.util.TimerTask; 

public class TimerMain { 

    public static void main(String[] args) { 
     Timer timer = new Timer(); 
     TimerTask task = new TimerTask(){ 
      private int count = 0; 

      @Override 
      public void run() { 
       count++; 
       System.out.println("Program has been running for " + count + " seconds."); 
      } 
     }; 
     timer.schedule(task, 1000, 1000); 

     //Make the main thread wait a while so we see some output. 
     try { 
      Thread.sleep(5500); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     //Stop the timer. 
     timer.cancel(); 
    } 

} 

別のアプローチ。私はタイミング精度に関してthis questionを見つけました。