如何在WPF游戏中获得当前时间?(无XNA)

本文关键字:时间 XNA WPF 游戏 | 更新日期: 2023-09-27 17:49:38

我正在尝试制作一款具有一定交互性的小型游戏,但需要足够准确的时间来评估游戏。

我看到一些java版本使用这种称为System.nanoTime的方法。

有。net版本吗?

更重要的是,我正在寻找一种我可以用来评估世界的计时器。我应该使用实际的计时器控件并订阅它吗?

游戏在不同于UI线程的线程上进行评估。

如何在WPF游戏中获得当前时间?(无XNA)

DateTime.Now在纳秒范围内没有实际的分辨率。Tick是100纳秒的"块"时间,但DateTime.Now 不解析每个Tick。我认为DateTime.Now的最低分辨率是10毫秒左右。如果您快速调用DateTime.Now两次,您将得到相同的答案。你只会在大约10毫秒后看到它滴答作响,这取决于你在周期的哪个位置调用它。

Stopwatch类具有比DateTime.Now更好的分辨率。我相信它可以精确到毫秒,这应该能够给你足够的分辨率来判断你的游戏评估代码是否运行得足够好。在提供的链接中有一个很好的对比Stopwatch和DateTime的例子。

此外,频率字段和GetTimestamp方法可以用来代替非托管的Win32 api queryperformancfrequency和QueryPerformanceCounter。

System.Threading。计时器的分辨率为1ms。如果你需要一个更高的分辨率,你可以调用queryperformancfrequency()和QueryPerformanceCounter()在kernel32.dll

你试过了吗

DateTime.Now;

每次调用时给出当前时间。您可以在两个不同的点上得到它,并减去endtime - startime作为时间跨度。

嗯,有DateTime.UtcNowDateTime.Now。但是,对于重复出现的进程,应该使用其中一个计时器类。通常用于wpf的是DispatcherTimer

DateTime.Now.Ticks将使您的速度降至100纳秒。

http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx

使用StopWatch类,它在内部使用QueryPerformanceCounter,所以您有一个非常好的分辨率。这样你就不需要pinvoke/interop了