在多人游戏中更新游戏状态

问题描述

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

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

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

解决方法

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

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

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

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

所以我认为最有效的方法可能是继续使用 C/S 模型而不是 P2P,前提是您的游戏将在 LAN 中使用并且有相当多的玩家。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...