gpt4 book ai didi

c# - 在使用浮点运算的多人 RTS 游戏中保持同步

转载 作者:太空狗 更新时间:2023-10-29 20:35:34 31 4
gpt4 key购买 nike

我正在用 C# 编写 2D 太空 RTS 游戏。单人游戏作品。现在我想添加一些多人游戏功能。我在谷歌上搜索了一下,似乎只有一种方法可以让数千个单位在没有强大网络连接的情况下连续移动:只通过网络发送命令,同时对每个玩家运行相同的模拟。

现在有一个问题,整个引擎到处都使用 double 。浮点计算在很大程度上取决于编译器优化和 cpu 架构,因此很难保持同步。而且它根本不是基于网格的,并且有一个简单的物理引擎来移动 spaceship ( spaceship 有冲量和角动量......)。因此,重新编码整个内容以使用定点会非常麻烦(但可能是唯一的解决方案)。

到目前为止我有两个选择:

  • 告别当前代码,使用整数从头开始
  • 仅在带宽足以容纳 8 名玩家和数千个单位并在(几乎)每一帧中发送位置和方向等的地方制作游戏 LAN...

所以我在寻找更好的意见,(或者甚至是关于将代码迁移到定点而不弄乱一切的技巧......)

最佳答案

当然,您的所有客户端都将使用相同的二进制文件,因此编译器优化对同步问题没有影响。

此外,如果您只计划以一种架构为目标(或者至少只允许人们在同一架构上相互对战),那么这也没有关系。

我在 C# 中使用浮点为 iPhone 和桌面开发游戏做了完全相同的事情,它们都给出了相同的结果,即使 iPhone 是 ARM 而桌面是 x86。

只要确保游戏进行完全相同的计算就可以了。

如果一切都失败了,只需将游戏中的所有 float 实例替换为标准的定点算术类。这样您就可以 100% 确定您的计算在所有架构中都是确定性的,尽管定点运算的性质可能会对您的游戏产生不利影响。

关于c# - 在使用浮点运算的多人 RTS 游戏中保持同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948929/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com