Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在尝试更新Dispatcher的间隔,但不总是有效_C#_Wpf_Dispatchertimer - Fatal编程技术网

C# 正在尝试更新Dispatcher的间隔,但不总是有效

C# 正在尝试更新Dispatcher的间隔,但不总是有效,c#,wpf,dispatchertimer,C#,Wpf,Dispatchertimer,我想做一个蛇游戏。我想发生的是,每次蛇吃了一块食物,它就会移动得更快 我想通过让计时器加快来实现这一点 我以以下时间间隔启动计时器: 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(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以下


我的问题是为什么中间值的间隔不更新?

Dispatcher的设计不是为了以精确的间隔执行操作

虽然它以精确的间隔分派操作,但分派的操作将在您案例中的GUI线程wpf应用程序循环决定执行时执行

将间隔设置为20.000个刻度将导致间隔为20.000*100ns=2.000.000ns=2ms。wpf应用程序的分辨率最多为10毫秒左右

看看这些帖子:


谢谢您提供的信息,但这并不能完全回答我的问题。我以2ms的时间启动它,然后它运行(虽然并没有那个么快,所以我看到你们最好的时间点是10ms),然后每次我的蛇吃东西时,尝试缩短这个时间。但是,一旦值达到1ms,它就会突然加速,而不是我预先进行的每次间隔更改。这是我不理解的行为。你能推荐哪种定时器更适合我的需要吗?你可以使用调度定时器。但是,不是调整其间隔,而是计算自上次执行更新计时器功能以来蛇需要移动的时间距离,并相应地设置位置。e、 g.将间隔设置为固定的20ms,每秒更新50次位置。然后你有你的速度变量。这是你应该调整的。您可以根据需要执行尽可能多的位置更新,以匹配设置的速度。就像newposition=oldposition+speed*时间和时间是你固定的20毫秒间隔。只是为了成为一个聪明的驴子。。。是的,我的回答回答了你的问题。“为什么中间值的间隔不更新?”您甚至突出显示了您的问题并使用了粗体字体。