加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:58:05 所属栏目:百科 来源:网络整理
导读:我正在用C#编写2D空间RTS游戏.单人运动.现在我想添加一些多人游戏功能.我用谷歌搜索它似乎只有一种方法可以让数千个单元在没有强大的网络连接的情况下连续移动:在每个玩家运行相同的模拟时,只通过网络发送命令. 现在整个发动机到处使用双打都存在问题.浮点
我正在用C#编写2D空间RTS游戏.单人运动.现在我想添加一些多人游戏功能.我用谷歌搜索它似乎只有一种方法可以让数千个单元在没有强大的网络连接的情况下连续移动:在每个玩家运行相同的模拟时,只通过网络发送命令.

现在整个发动机到处使用双打都存在问题.浮点计算在很大程度上取决于编译器优化和cpu体系结构,因此很难保持同步.
并且它根本不是基于网格的,并且有一个简单的phisics引擎来移动太空船(太空船有冲动和角动量……).所以重新编码整个东西使用固定点将是非常麻烦(但可能是唯一的解决方案).

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

>再说一遍当前代码并使用整数从头开始重新启动
>只在有足够带宽的情况下让局域网局域网拥有8个拥有数千个单位的玩家并在(几乎)每一帧中发送位置和方向等…

所以我寻找更好的意见,(甚至是将代码迁移到定点而不会弄乱一切的提示……)

解决方法

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

此外,如果您只计划定位一个体系结构(或者至少只允许人们在相同的体系结构中相互竞争),那么这也无关紧要.

我在C#开发iPhone和桌面游戏时使用浮点完全相同,他们都给出了相同的结果,即使iPhone是ARM而桌面是x86.

只要确保游戏完全相同的计算,你就可以了.

如果所有其他方法都失败了,只需将游戏中浮动的所有实例替换为标准的定点算术类.这样,您可以100%确定您的计算在各种体系结构中是确定性的,尽管定点算术的性质可能会对您的游戏产生负面影响.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读