Я создаю свою первую онлайн-игру с использованием socket.io, и мне бы хотелось, чтобы она была многопользовательской игрой в реальном времени, такой как agar.io или diep.io.
Но я столкнулся с проблемой выяснения того, как заставить все компьютеры работать с одинаковой скоростью.
У меня есть три идеи для моделей, но ни одна из них не кажется правильной, и мне интересно, как это делают обычные видеоигры. (Вы можете пропустить чтение моих идей; они просто дают вам возможность увидеть проблемы, с которыми я сталкиваюсь.)
Сервер позволяет клиентам работать самостоятельно и передавать обновления на сервер, который затем передает их остальным клиентам. Это связано с тем, что некоторые компьютеры работают быстрее, чем другие, что позволяет им обновляться быстрее и перемещаться по экрану быстрее.
Пусть сервер скажет клиентам, когда обновлять. Затем я могу дождаться ответа последнего клиента (ужасная идея, если у одного человека медленный компьютер), дождаться ответа первого клиента (опять же, ожидая связи перед каждым кадром) или просто отправить их как можно быстрее (что кажется, сталкивается с той же проблемой, что и номер 1).
В начале игры попросите сервер сообщить клиентам, как быстро выполнить обновление. Это будет означать, что клиент будет нести ответственность за ограничение движения между этими периодами времени. Например, если кому-то каким-то образом удалось нажать кнопку дважды в течение этого периода времени, он отправит только одно событие нажатия кнопки. Это приводит к тому, что некоторые действия будут игнорироваться (например, нажатие двойной кнопки) и что взаимодействие будет зависеть от часов клиента, которые могут не совпадать с часами сервера. Сервер должен будет отслеживать каждого клиента и следить за тем, чтобы его обновления отправлялись в нужное время.
Я провел некоторое исследование , но статьи, которые я читаю, явно не касаются того, что делать, если клиент отправляет обновления быстрее, чем другие клиенты.
В моем конкретном случае я имею дело с людьми, которые имеют более высокие скорости клавиатуры (их компьютер будет отправлять больше обновлений клавиатуры, чем другие компьютеры).
Как программисты обычно справляются с этим?