客户端预测和共享代码

时间:2013-06-20 11:24:52

标签: c++ networking multiplayer

这是我的第一个问题,所以当我必须澄清一些事情时,请告诉我。

在局域网内制作多人游戏很容易,因为您不必处理插值,客户端预测等。但是如何在客户端和服务器上为客户端实现逻辑预测?实现它两次,或在类上创建并为客户端和服务器创建一种包装器?

此外,通常是共享所有数据以使客户端完全同步,还是只发送一些变量,如对象是否是实体,它的位置和形状......?

所以我基本上有两个问题:

  1. 通常在客户端上使用与服务器上完全相同的类吗?或者他们是在客户端和服务器上以两种不同的方式编写代码? (如果相同的代码,怎么样?)
  2. 类之间应该共享哪些数据?只有你总是需要的部分,或者只是同步服务器和客户端上相同类之间的所有数据?
  3. 旁注:我说的是关于你控制的角色的客户端预测。我将对其他实体使用插值。

1 个答案:

答案 0 :(得分:0)

经过大量阅读和一些经验,我得出了一些结论:

在许多情况下,可以使用完全相同的类。处理同步的一种流行方法是让这些类继承自Realizable类。该类将提供(纯)虚拟函数来读取和写入数据流。如果程序托管服务器,它将请求对象将其数据写入流,否则它将读取从服务器接收的流。

通常,您只会在读取或写入流的函数中同步所需的数据。

客户端预测的一个解决方案似乎是在客户端上创建一个处理输入等的PlayerHandler。客户应该知道他们控制的是哪个玩家。然后处理程序可以临时覆盖对象的位置等。您需要编写一些特定于游戏的自定义代码来处理其余部分。