让我们做一件简单的事情,我们有一个客户端绘制的云,以及发送命令来移动云的服务器。假设客户端1以60 fps运行,而客户端2以30 fps运行,我们希望有一个平滑的云转换。
第一个问题 - 服务器与客户端有不同的fps,如果每次打勾都发送移动命令,它将更快地开始发送垃圾邮件命令,然后客户端将绘制。
可能的解决方案1 - 客户端在完成框架后发送“我想要更新”命令。
可能的解决方案2 - 服务器每隔x ms发送一次移动云命令,但云将无法顺利移动。可以与解决方案3结合使用。
可能的解决方案3 - 服务器发送 - “以速度x开始移动云”并“更改”云方向“而不是”将云移动到x“。但问题是再次检查更改云dir在屏幕边缘,将触发更快,然后云实际上在客户端绘制。
客户端2比客户端1慢2倍,如何补偿?
如何以基本方式与客户端同步服务器逻辑?
答案 0 :(得分:1)
解决方案3听起来是迄今为止最好的解决方案,如果你能做到的话。所有其他解决方案都过于繁琐:它们需要在客户端和服务器之间进行极其频繁的通信,除非服务器和客户端之间有非常好的网络连接,否则会非常频繁。
如果您的云移动非常简单,可以将它们作为向量发送到客户端,以便客户端可以在接收新指令之前将云沿着一个向量移动一段时间(许多帧)(一个新的开始)来自服务器的位置和矢量)那么你绝对应该这样做。如果您的云移动不像简单向量那么容易表示,那么您可以选择更复杂的模型(例如,添加指令以随时间转换向量)并将模型的参数发送给客户端。
如果云是更大世界的一部分并且客户端在世界中跟踪时间,那么来自服务器的每组指令应包括表示模型中初始条件有效的时间的时间戳。 / p>
关于如何补偿客户端2绘制速度比客户端1慢两倍的问题,您需要在两个客户端上以一致的速率打开世界时钟。此速率与任一客户端的屏幕刷新率无关。