我正在开发在线游戏并拥有客户端和服务器。对于客户端我使用Unity3D和C#,服务器是用C#编写的。对于同步我使用计时器,因为我们知道计时器取决于刻度。 C#中的刻录计数器是类秒表,1秒内的刻度计数等于秒表。频率,但在服务器和客户端上,Stopwatch.Frequency的值不同,它会导致我的同步,因为服务器上的计时器太慢而不像计时器客户端。服务器上的Stopwatch.Frequency等于3.124.980,客户端上的Stopwatch.Frequency等于10.000.000。所以为什么???如何更改Stopwatch.Frequency的定时器同步值?谢谢,抱歉我的英文不好
答案 0 :(得分:1)
Stopwatch
可能不可靠,因此您根本无法在游戏中使用它(因为你希望它能在每台计算机上运行)。
许多游戏都使用全球手表,而且我已经看到,即使是最简单的全球手表算法也足以让客户端与游戏服务器同步。看看Cristian's algorithm。
拥有全局监控,您只需使用DateTime.UtcNow
来衡量时间。
答案 1 :(得分:1)
无法更改StopWatch.Frequency - 它将定时器的频率作为每秒的滴答数。该字段是只读的。
秒表类使用的计时器取决于系统硬件和操作系统。
如果秒表计时器基于高分辨率性能计数器,则 Stopwatch.IsHighResolution 字段为true。否则,IsHighResolution为false,在这种情况下,它表示秒表计时器基于系统计时器。