我正在尝试制作一个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以下。
我的问题是为什么Interval没有更新中间值?
答案 0 :(得分:2)
DispatcherTimer并非旨在以精确的间隔执行操作。
当它以确切的间隔调度操作时,调度的操作将被执行,当你的情况下的GUI线程wpf应用程序循环决定这样做。
您将间隔设置为20.000个刻度会导致间隔为20.000 * 100ns = 2.000.000ns = 2ms。 wpf应用程序的分辨率最多约为10毫秒。
查看这些帖子: