2013-04-10 32 views
5

"Trò chơi Robot" là trò chơi cơ bản đầu tiên tôi phát triển. Nhân vật Magenta '#' là kẻ thù và nó được cho là có một chuyển động ngẫu nhiên trong bản đồ này, nhưng chuyển động ngẫu nhiên của nó quá nhanh và tôi đã cố gắng sử dụng Threading nhưng nó ảnh hưởng đến tốc độ của tất cả các nhân vật. Bây giờ, tôi cần gọi phương thức "Enemy" sau mỗi 100 mili giây.Làm thế nào để gọi một phương pháp cụ thể mỗi giây trong C#?

Robot trò chơi hình ảnh: enter image description here

+0

bạn đã thử này .. http://stackoverflow.com/questions/10954859/run-function-every-second-visual-c-sharp –

+0

hoặc câu hỏi này http://stackoverflow.com/questions/2897787/whats-the-most-efficient-way-to-call-a-method-every-20-seconds?rq=1 –

+0

Sử dụng ['Timer'] (http://msdn.microsoft.com/en-gb/library/system.timers.timer.aspx). Đây là một [hướng dẫn] cơ bản (http://www.dotnetperls.com/timer). –

Trả lời

14

Bạn có thể sử dụng System.Timer. Tuy nhiên, hãy cảnh giác rằng những bộ hẹn giờ này có thể không chính xác như bạn mong muốn. Bạn sẽ không bao giờ dễ dàng có được một bộ đếm thời gian hoàn toàn chính xác trên một hệ điều hành không thời gian thực như Windows, nhưng nếu bạn muốn độ chính xác của bộ hẹn giờ tốt hơn, thì Multimedia timer có thể hữu ích.

System.Timer ví dụ từ 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

Tôi nghĩ bạn có thể đã quên autoreset = true? Tôi có sai ở đây không? – Gaspa79

+1

@ Gaspa79 Timer.AutoReset mặc định là đúng https://msdn.microsoft.com/en-us/library/system.timers.timer.autoreset(v=vs.110).aspx – Kohanz

+0

Yup, bạn nói đúng. Nó không làm việc cho tôi lúc đầu bởi vì tôi đã sử dụng một Timer khác nhau. Thanks =) – Gaspa79

Các vấn đề liên quan