为了使游戏像RTS网络游戏一样,我在这里看到了许多答案,这些建议建议使游戏完全具有确定性。那么您只需要彼此转移用户的操作,并稍微延迟所显示的内容,以便在呈现下一帧之前“锁定”每个人的输入。这样,诸如单位位置,健康状况之类的事情就不需要通过网络不断更新,因为每个玩家的模拟都是完全相同的。我也听到过建议进行重放的同一件事。
但是,由于浮点计算在机器之间,甚至在同一机器上同一程序的不同编译之间是不确定的,真的可以这样做吗?我们如何防止这一事实在整个游戏中引起波动的玩家(或重播)之间产生微小差异?
我听说有人建议完全避免使用浮点数int
来表示小数的商,但这对我来说并不实用-例如,如果我需要取一个角度的余弦值怎么办?我是否真的需要重写整个数学库?
请注意,我主要对C#感兴趣,据我所知,在这方面,C#与C ++存在完全相同的问题。