3

スネークゲームを作ろうとしています。私が実現したいのは、ヘビが食べ物を食べるたびに動きが速くなることです。

タイマーの刻みを速くすることでこれを行いたいです。

次の時間間隔でタイマーを開始します。

gltimer.Interval = new TimeSpan(20000)

そしてそれを次のように更新します:

public void updateTimer(object sender, EventArgs e)
{
    long nrTicks = gltimer.Interval.Ticks;
    nrTicks = (long)(nrTicks * 0.95);
    gltimer.Interval = new TimeSpan(nrTicks);
}

しかし、ゲームを実行すると、速度は 14 番目のスナックに到達するまで同じままで、その後突然変化します。nrTicks が 10000 を下回ることはすでにわかっています。

私の質問は、間隔が中間値に対して更新されないのはなぜですか?

4

1 に答える 1

2

DispatcherTimer は、正確な間隔でアクションを実行するようには設計されていません。

正確な間隔でアクションをディスパッチしている間、wpf アプリケーション ループの GUI スレッドが実行を決定すると、ディスパッチされたアクションが実行されます。

間隔を 20.000 ティックに設定すると、間隔は 20.000*100ns = 2.000.000ns = 2ms になります。wpf アプリケーションの解像度はせいぜい 10 ミリ秒程度です。

それらの投稿を見てください:

于 2014-05-17T13:04:35.857 に答える