3

我正在尝试制作 Snake 游戏。而我想要发生的是,蛇每吃一块食物,它就会移动得更快。

我想通过加快计时器滴答声来做到这一点。

我以以下间隔时间启动计时器:

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 并非旨在以精确的时间间隔执行操作。

虽然它以确切的时间间隔分派动作,但当您的情况下的 GUI 线程 wpf 应用程序循环决定这样做时,将执行分派的动作。

您将间隔设置为 20.000 滴答声会导致间隔为 20.000*100ns = 2.000.000ns = 2ms。wpf 应用程序的分辨率最多约为 10 毫秒。

看看那些帖子:

于 2014-05-17T13:04:35.857 回答