我正在使用socket.io创建我的第一个在线游戏,我希望它是像agar.io或diep.io这样的实时多人游戏。
但是我遇到了试图弄清楚如何使所有计算机以相同速度工作的问题。
我对模型有三个想法,但似乎都不对,我想知道普通电子游戏是如何做到的。(您可以跳过阅读我的想法;它们只是给您一种查看我遇到的问题的方法。)
服务器允许客户端自行运行,并将更新传递给服务器,然后服务器将其广播给其余的客户端。这样做的问题是,某些计算机的运行速度比其他计算机要快,因此它们的更新速度更快,并且在屏幕上的移动速度更快。
让服务器告诉客户端何时更新。然后,我可以等到最后一个客户端做出响应(如果一个人的计算机速度较慢,这是一个糟糕的主意),或者等到第一个客户端做出响应(再次,在每帧之前等待通信),或者尽可能快地发送它们(似乎遇到了与数字1相同的问题。
在游戏开始时,让服务器告诉客户端更新的速度。这意味着客户将负责限制这段时间之间的移动。例如,如果某人设法在该时间段内两次按下按钮,则只会发送一个按钮按下事件。这样做的问题是某些操作将被忽略(例如,按两次双键),并且交互将依赖于客户端的时钟,而这可能与服务器的时钟不匹配。然后,服务器将必须跟踪每个客户端,并确保在正确的时间提交其更新。
我已经进行了一些研究,但是我阅读的文章似乎并未具体说明如果客户端发送更新的速度比其他客户端快的话该怎么办。
在我的特定情况下,我正在与键盘速度更快的人打交道(他们的计算机比其他计算机发送更多的键盘更新)。
程序员通常如何处理呢?