私は宇宙船のシューティングゲームに取り組んでいます。ゲームでは、私は別のタスクを実行する低速移動ミサイルがあります。タスクの数が多すぎます
Task t4 = new Task(() => fireShipCannons());
これらはあまり効果がありません。小さなビットマップを画面全体に移動するだけです。通常は30ループのforループです。問題は、タイミングがずれており、いくつかのタスクが他のタスクよりも優先されるように見えるということです。また、私はThread.Sleep(100)を使用しているミサイルの速度を制御することに注意することが重要です。このため、メソッドは数秒間実行されます。私はC#を使用しています
、.NET、Windowsフォームアプリケーション
は、私はこれを言い替えるする方法を考える時間を費やしている、と私はそれが正確に言葉で表現されると思います。私が抱えていた問題は幅広いものでした。そう、はい、その質問は少し広いかもしれません。私はすばらしい答えを得ました!それは質問が正しく尋ねられたことを示していませんか?
ゲーム内のオブジェクトごとにタスクをスピンアップしないでください。実際には、ゲーム内のすべての変更を制御するために通常は1つのループがあります。簡単にすると、ループは次のようになります。 while(isGameRunning) { Update(DateTime.UtcNow); Render(); } ゲーム内の各オブジェクトの実際の速度ベクトルを知り、Updateメソッドで新しい位置を計算するだけです。次に、Renderメソッドは、現在の状態を描画します。距離が調整されるため、最後の更新からどれだけの時間が経過しても問題ありません。 – Artak