在C#游戏的网络代码中,我看到系统返回底片的问题。谁能发现原因或提供改进?

时间:2015-04-23 22:18:54

标签: c# server multiplayer

游戏的主要“Ping”/“时间”功能是:

Net Code For Server - Time/Ping

在交换机之外,TimeSync()的功能如下:

private void TimeSync()
{
    YGConnection.Send("Time", DateTime.UtcNow.Millisecond);
}

它将当前UTCNow.Millisecond时间发送到服务器。

最后,getTime()获取当前时间+服务器的偏移量。

private double getTime()
{
    return Math.Round((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds) + Offset;
}

一切正常,但产生的数字是这样的:

版本0.1.5:服务器时间偏移:-486335789940 - Ping:-943491433067

服务器基本上发送getTime(),但没有偏移量。我想知道负数是怎么回事,如果我有什么办法可以解决这个问题。

1 个答案:

答案 0 :(得分:1)

DateTime.Milliseconds是当前秒内的毫秒数(千分之一秒)。如果你只比较毫秒,你将丢失任何信息,如它发生的第二个。

午夜时间是00:00:00.000

500毫秒后,它是00:00:00.500

500毫秒后,它是00:00:01.000

如果您只是比较毫秒,前两次之间的差异将是500 最后两个之间的差异将是-500。

您可能想要做的是返回一个完整的日期/时间值,而不仅仅是毫秒。如果减去2个DateTime对象,则会得到TimeSpan个对象。从那里你可以发现TimeSpan.TotalMilliseconds将给你这两次之间有多少毫秒,无论经过了多少秒。