2013-04-10 8 views
5

"Gra Robot" to pierwsza podstawowa gra, którą stworzyłem. Magenta "#" jest wrogiem i przypuszczalnie ma ruch losowy na tej mapie, ale jej losowy ruch jest zbyt szybki i próbowałem użyć wątku, ale wpływa to na szybkość wszystkich postaci. Teraz potrzebuję wywoływać metodę "wroga" co 100 milisekund.Jak wywołać określoną metodę co kilka sekund wC#?

Robot gra Obrazek: enter image description here

+0

Czy próbowałeś to .. http://stackoverflow.com/questions/10954859/run-function-every-second-visual-c-sharp –

+0

lub to pytanie http://stackoverflow.com/questions/2897787/whats-the-most-efficient-way-to-call-a-method-every-20-security?rq=1 –

+0

Użyj ['Timer'] (http://msdn.microsoft.com/en-gb/library/system.timers.timer.aspx). Oto podstawowy [tutorial] (http://www.dotnetperls.com/timer). –

Odpowiedz

14

Można użyć System.Timer. Należy jednak uprzedzić, że te liczniki czasu mogą nie być tak dokładne, jak może się wydawać. Nigdy nie będziesz w stanie uzyskać w pełni dokładnego licznika czasu w systemach czasu rzeczywistego innych niż rzeczywisty, takich jak Windows, ale jeśli chcesz uzyskać lepszą dokładność timera, pomocna może być Multimedia timer.

System.Timer przykład z MSDN:

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

Myślę, że mogłeś zapomnieć o autoreset = true? Czy ja tu się mylę? – Gaspa79

+1

@ Gaspa79 Timer.AutoReset domyślnie jest prawdziwy https://msdn.microsoft.com/en-us/library/system.timers.timer.autoreset(vsvs.110).aspx – Kohanz

+0

Tak, masz rację. Na początku mi to nie podziałało, ponieważ używałem innego Timera. Thanks =) – Gaspa79

Powiązane problemy