更新多人游戏的游戏状态



我正在制作一款多人游戏。每个客户端都有一个在共享环境中移动的角色。
我使用socket.iopeer.js在客户端之间创建点对点连接。
我想做的是使每个客户端能够更新其他玩家在他的地图上的角色位置。
为此,每个客户端都应该有其他玩家的键盘光标(箭头键)的状态,这样他就可以用行走动画移动他们对应的角色。

P2P:我正在考虑在客户端之间创建双工流,以便每个客户端都有其他玩家的键盘光标的状态,这样他就可以用适当的动画移动他们的角色…
SOCKETS:我也可以通过服务器使用套接字传递信息,但我将不得不发送一个更新的光标状态每秒60次,因为游戏是在60帧/秒,这使得很多套接字消息。我不确定这是不是最有效的处理方法

让每个人都了解其他玩家状态的最有效方法是什么?任何建议都将不胜感激。谢谢。

实际上你的游戏很可能是MMORPG游戏或CS/CSGO之类的小demo。

对于这样的游戏,我们总是在主进程(工作过程)中以每秒几帧(例如20帧)的频率进行循环。在每一帧中,客户端将处理从其他端接收到的数据包和来自播放器的选项。

如果这里是20帧,这意味着每帧不能超过50ms,所以如果是在WLAN中,会造成一些延迟,并且发生一些数据包丢失。

如果你想使用P2P来同步玩家的动作,这里有一个问题:当玩家数量激增时,连接的复杂性也随之下降。更重要的是,你需要一个可靠的连接协议,这意味着你需要知道如何使用QUIC或编写一个可靠的UDP自己。

所以我认为最有效的方法可能是使用C/S模式,而不是P2P,只有当你的游戏将在局域网中使用,并且有相当多的玩家。

最新更新