2016-11-08 8 views
0

スイングゲームを開発するためにSwinGameを使用しています。 MoveForwardメソッドは、ヘビの動きを処理します。私が今ある問題は、その特定の方法を遅らせることができず、スネークが一定の低速で動くようになることです。ここでスネークゲームのための単一のメソッドを遅らせるC#

がメインでコードです:あなたがコードから見ることができるように

using System; 
using SwinGameSDK; 
using System.Threading.Tasks; 


namespace MyGame 
{ 
    public class GameMain 
    { 

    public static void Main() 
    { 

     //Open the game window 
     SwinGame.OpenGraphicsWindow ("GameMain", 800, 600); 
     SwinGame.ShowSwinGameSplashScreen(); 

     Snake snake = new Snake(); 


     //Run the game loop 
     while (false == SwinGame.WindowCloseRequested()) { 
      //Fetch the next batch of UI interaction 
      SwinGame.ProcessEvents(); 

      //Clear the screen and draw the framerate 
      SwinGame.ClearScreen (Color.White); 

      SwinGame.DrawFramerate (0, 0); 

      // Has to go after ClearScreen and NOT before refreshscreen 

      snake.Draw(); 

      Task.Delay (1000).ContinueWith (t => snake.MoveForward()); 


      snake.HandleSnakeInput(); 

      //Draw onto the screen 
      SwinGame.RefreshScreen (60); 


     } 
    } 
} 
} 

、ゲームは、whileループで実行されます。私は "Task.Delay(1000).ContinueWith(t => snake.MoveForward());"を使用してメソッドを遅延させることができました。最初のループでのみ実行されます。私がデバッグすると、スネークは最初のループで正常に遅延しますが、ズームは残りのループを過ぎてしまいます。

どのようにコードを実装すれば、すべてのループでメソッドが遅れて、スネークが一定の速度で動くようにすることができますか?

ありがとうございます。

+1

ループ内の画面を消去して再描画しますか?それは正しく見えません –

+0

whileループの代わりに関数を作成し、 'ContinueWith'から再帰的に呼び出します。あるいは、 'ContinueWith'の後に' Wait() 'を追加してタスクの結果を待つだけです。 –

+0

' Task.Delay'を使う理由はありません。 'System.Timers.Timer'を使います。蛇をコールバックの中で動かす。 whileループの必要はありません –

答えて

2

ループの繰り返しごとに遅延タスクを作成しています。ループを遅らせるのではなく、MoveForwardメソッドの実行を遅らせるだけなので、ループはまだ最大速度で実行されます。これは、初期遅延タスクがループが実行されたのと同じ速度で実行された後にこれを引き起こす。タスクが完了するのを待つにはawaitを使用してください。

スネークを一定の間隔で動かしたい場合は、タイマーを使用しないのはなぜですか?

Timer timer = new Timer(1000); 
timer.AutoReset = true; 
timer.Elapsed += (sender, e) => snake.MoveForward(); 
timer.Start(); 
+0

実際にはタイマーは問題ありませんが、遅延タスクを実際に待つことは絶対にありません。問題の原因 – grek40

+0

それは私が言っていたことですが、答えをもう一度読むことはそれほど明確ではありませんでした。私は答えを編集し、それがより明確になることを願っています。 – EpicSam

+0

ご協力ありがとうございます!あなたの方法は働いた。ヘビは絶えず動いており、すべての方向に動くことができます。 –

関連する問題