5

我正在研究一个学习 node.js 的项目,并且正在寻找一些关于如何实时处理同步用户数据的建议。

假设您有一个 2D 矩形地图(大约 600x400),许多玩家占据该地图上的 x,y 位置。每个用户都可以使用箭头键导航并以某种基本方式与其他用户交互。鉴于这将通过 HTTP 播放,那么在处理和同步用户数据以提供最流畅、最快速的体验方面,最好的设计模式是什么?

我可以想到几个选项,但希望有更多的想法/澄清:

  1. 客户端将位置数据发送到服务器,服务器将所有位置分配给所有客户端,屏幕呈现结果。重复。不利的一面是客户端会滞后于数据往返所需的时间,但好处是它们与所有用户同步。

  2. 客户端在它认为的位置不断渲染,将位置数据发送到服务器,服务器将所有位置分配给所有客户端,然后使用服务器数据更正来自客户端数据的屏幕渲染。上行是更快速的响应,下行是稍微失去同步。

  3. 两者的混合,但我们不使用 (x,y) 坐标,而是使用 [先前的 x/y 和时间,当前的 x/y 和时间,建议的时间间隔的 x/y] 的向量,然后可以用于绘制不断变化的射弹路径。这似乎很难实现。

任何指针?

4

1 回答 1

5

大多数游戏使用某种形式的航位推算http://en.wikipedia.org/wiki/Dead_reckoning允许从服务器分发延迟更新,但保留客户端上实时更新的一些错觉。

最好的选择是 3。它不是特别复杂 - 只需根据游戏机制跟踪您期望每个演员在哪里,当您收到来自服务器的更新时,您会随着时间的推移使这两个状态保持一致。

如果您发现服务器向您发送的状态与您的客户端假设的状态相距太远(需要定义太远),那么您可以直接跳转到服务器状态并接受客户端上的不连续性。

于 2011-08-20T12:23:52.007 回答