スイングゲームを開発するために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());"を使用してメソッドを遅延させることができました。最初のループでのみ実行されます。私がデバッグすると、スネークは最初のループで正常に遅延しますが、ズームは残りのループを過ぎてしまいます。
どのようにコードを実装すれば、すべてのループでメソッドが遅れて、スネークが一定の速度で動くようにすることができますか?
ありがとうございます。
ループ内の画面を消去して再描画しますか?それは正しく見えません –
whileループの代わりに関数を作成し、 'ContinueWith'から再帰的に呼び出します。あるいは、 'ContinueWith'の後に' Wait() 'を追加してタスクの結果を待つだけです。 –
' Task.Delay'を使う理由はありません。 'System.Timers.Timer'を使います。蛇をコールバックの中で動かす。 whileループの必要はありません –