【问题标题】:Time on server since client sent packet自客户端发送数据包以来服务器上的时间
【发布时间】:2017-04-01 02:56:47
【问题描述】:

我目前正在开发一个带有客户端和服务器的游戏,并试图找出一种方法来判断客户端发送数据包和服务器接收数据包的时间量(这样我就可以检查敌人在哪里那时)。

我尝试发送

DateTime.Now.Subtract(DateTime.MinValue.AddYears(1969)).TotalMilliseconds

使用客户端,然后在收到数据包时检查服务器上的相同值,然后减去它们,但问题是,如果客户端和服务器位于不同的时区,则时区可能会完全破坏这一点。而且它似乎不是最准确的。

有没有“正确”的方法来做到这一点?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    发送纪元时间不会考虑闰秒,但如果您使用 DateTime.UtcNow 并以 UTC 进行所有处理,则时区更改不会受到影响。使用此方法将允许用户操纵该数字,因为它基于计算机时间设置。没有真正正确的方法来处理这个问题。查看许多存在延迟问题的游戏。这发生在客户端和服务器端处理中。

    根据游戏类型,此方法的另一个问题是用户的反应取决于实时事件。因此,如果您将时间倒转进行计算,其结果可能会影响其他玩家的行动。

    对于复杂的处理,I think the game 'Eve online' will slow down 'Game Time' for large fights.

    【讨论】:

    • 感谢您的链接,但是,只要我有时间从客户端发送数据包到服务器接收,那对我来说就可以了。我的游戏是 PvE,客户端处理碰撞。 (因此,当客户端检测到碰撞时,它会将碰撞发送给服务器,然后服务器查看那个敌人,查看碰撞发生时的位置,并查看碰撞是否有效)。由于我的游戏不是 PvP,所以我不需要处理与其他玩家有关的任何事情。
    • @user183106 在这种情况下,您可以在客户端和服务器上都使用DateTime.UtcNow。时间是协调的,不需要以某一年为基础。
    猜你喜欢
    • 2015-02-10
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 2014-09-07
    • 2016-07-21
    • 2014-04-08
    相关资源
    最近更新 更多