我正在实施一个多人小行星克隆,以了解游戏中的客户端/服务器网络架构。我花了一些时间阅读GafferOnGames和Valve关于他们的客户端/服务器技术的出版物。我在两个概念上遇到麻烦。
目前,我有一个权威的游戏服务器,使用box2d模拟物理并将每秒大约20次的世界状态发送给客户端。每个客户端都跟踪接收到的最后几个快照,并在两个状态之间进行切换以使Sprite的移动变得平滑。但是,它并不那么顺利。可能会平滑一段时间,然后有点生涩,然后恢复平滑,等等。我尝试过TCP和UDP,两者大致相同。知道我的问题是什么吗?(注意:我首先为单个玩家实现了此功能,当每秒仅更新20次物理世界时,精灵运动在60fps时非常流畅)。
为了解决第一个问题,我认为客户端也应该运行box2d模拟,并仅在不匹配时更新其sprite的位置以匹配服务器快照。我认为这可能会更流畅,因为我的单人游戏实施很流畅。这是一个好主意吗?
即使不能解决上述问题,客户端预测是否也有必要?例如,如果玩家试图移动自己的飞船,他们如何知道是否在没有物理模拟的情况下撞到小行星,墙壁或敌方飞船?似乎他们的飞船似乎通过了应该与之碰撞的物体,然后才从服务器收到快照,说他们击中了该物体。
谢谢!