2013-04-10 10 views
5

「ロボットゲーム」は私が開発した最初の基本ゲームです。マジェンタの「#」キャラクタは敵であり、このマップではランダムな動きをしていると思われますが、ランダムな動きが速すぎるため、スレッディングを使用しようとしましたが、すべてのキャラクタのスピードに影響します。さて、100ミリ秒ごとに "Enemy"メソッドを呼び出す必要があります。C#で数秒ごとに特定のメソッドを呼び出す方法は?

ロボットゲーム画像: enter image description here

+0

あなたはこれを試してみました。.. http://stackoverflow.com/questions/10954859/run-function-every-second-visual-c-sharp –

+0

かこのように質問http://stackoverflow.com/questions/2897787/whats-the-most-efficient-way-to-call-a-method-every-20-seconds?rq=1 –

+0

['Timer'] (http://msdn.microsoft.com/en-gb/library/system.timers.timer.aspx)基本的なチュートリアルです(http://www.dotnetperls.com/timer)。 –

答えて

14

あなたはSystem.Timerを使用することができます。しかし、これらのタイマーはあなたが望むほど正確ではないかもしれないことに注意してください。 Windowsなどの非リアルタイムOSで完全に正確なタイマーを簡単に手に入れることは決してありませんが、タイマー精度を向上させたい場合はMultimedia timerが役立ちます。 MSDNから

System.Timer例:

public class Timer1 
{ 
    private static System.Timers.Timer aTimer; 

    public static void Main() 
    { 
     // Normally, the timer is declared at the class level, 
     // so that it stays in scope as long as it is needed. 
     // If the timer is declared in a long-running method, 
     // KeepAlive must be used to prevent the JIT compiler 
     // from allowing aggressive garbage collection to occur 
     // before the method ends. You can experiment with this 
     // by commenting out the class-level declaration and 
     // uncommenting the declaration below; then uncomment 
     // the GC.KeepAlive(aTimer) at the end of the method. 
     //System.Timers.Timer aTimer; 

     // Create a timer with a ten second interval. 
     aTimer = new System.Timers.Timer(10000); 

     // Hook up the Elapsed event for the timer. 
     aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 

     // Set the Interval to 2 seconds (2000 milliseconds). 
     aTimer.Interval = 2000; 
     aTimer.Enabled = true; 

     Console.WriteLine("Press the Enter key to exit the program."); 
     Console.ReadLine(); 

     // If the timer is declared in a long-running method, use 
     // KeepAlive to prevent garbage collection from occurring 
     // before the method ends. 
     //GC.KeepAlive(aTimer); 
    } 

    // Specify what you want to happen when the Elapsed event is 
    // raised. 
    private static void OnTimedEvent(object source, ElapsedEventArgs e) 
    { 
     Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime); 
    } 
} 
+0

私はあなたがautoreset = trueを忘れたかもしれないと思いますか?私はここで間違っていますか? – Gaspa79

+1

@ Gaspa79 Timer.AutoResetの既定値はtrueです。https://msdn.microsoft.com/en-us/library/system.timers.timer.autoreset(v=vs.110).aspx – Kohanz

+0

はい、そうです。私は別のタイマーを使っていたので、最初は私にとってはうまくいきませんでした。ありがとう=) – Gaspa79

関連する問題