0

我正在开发一款多人游戏。每个客户都有一个在共享环境中移动的角色。
我使用socket.io创建房间,使用peer.js在客户端之间创建点对点连接。
我要做的是让每个客户端都能更新他地图中其他玩家角色的位置。
为此,每个客户端都应该知道其他玩家的键盘光标(箭头键)的状态,以便他可以通过行走动画移动其对应的角色。

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

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

4

1 回答 1

1

实际上,您的游戏可能是 MMORPG 游戏或 CS/CSGO 之类的小演示。

对于这样的游戏,我们在主进程(工作进程)中总是有一个循环,频率大约是每秒几帧(比如 20 帧)。在每一帧中,客户端将处理从其他人那里收到的数据包以及来自pleyer的选项。

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

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

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

于 2021-02-14T02:19:45.663 回答