我正在尝试制作一个类似游戏的应用程序,需要一段准确的时间来评估游戏互动。我看到一些使用名为“System.nanoTime”的方法的Java版本。请问是否有.NET版本?
更重要的是,我正在寻找一种定时器,可以用来评估世界。我应该使用实际的计时器控件并订阅它吗?此外,游戏在与UI线程不同的线程上运行,这会有影响吗?
更重要的是,我正在寻找一种定时器,可以用来评估世界。我应该使用实际的计时器控件并订阅它吗?此外,游戏在与UI线程不同的线程上运行,这会有影响吗?
DateTime.Now
在纳秒范围内没有实际分辨率。Tick是时间的100纳秒“块”,但DateTime.Now
并不会每个Tick都解析。我相信DateTime.Now
最低的分辨率是10毫秒左右。如果您很快地连续调用DateTime.Now
两次,您将得到相同的答案。只有在大约10毫秒左右后,您才会看到它向上跳动,具体取决于您何时调用它。
Stopwatch类比DateTime.Now
有更好的分辨率。我相信它可以分辨到毫秒级别,这应该足够让您确定您的游戏评估代码是否表现良好。提供了一个很好的示例来对比Stopwatch和DateTime的区别。System.Threading.Timer的分辨率为1毫秒。如果您需要更高的分辨率,可以使用kernel32.dll中的QueryPerformanceFrequency()和QueryPerformanceCounter()进行p/invoke调用。
DateTime.Now;
StopWatch
类,它在内部使用QueryPerformanceCounter,因此您可以获得非常精细的分辨率。这样,您就不需要进行pinvoke/interop操作。DateTime.Now.Ticks
可以精确到 100 纳秒。
http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx