Я створюю свою першу онлайн-гру за допомогою socket.io, і хотілося б, щоб це була багатокористувацька гра в реальному часі, як agar.io або diep.io.
Але я зіткнувся з проблемою спроб з'ясувати, як змусити всі комп'ютери працювати з однаковою швидкістю.
У мене є три ідеї для моделей, але жодна з них не здається правильною, і мені цікаво, як це роблять звичайні відеоігри. (Ви можете пропустити читання моїх ідей; вони просто дають вам змогу побачити проблеми, які у мене є.)
Сервер дозволяє клієнтам самостійно працювати і передавати оновлення на сервер, які потім передають їх решті клієнтів. У зв'язку з цим проблема деяких комп'ютерів працює швидше, ніж інші, дозволяючи їм оновлюватись швидше та рухатися по екрану швидше.
Попросіть сервер повідомити клієнтам, коли потрібно оновити. Потім я можу зачекати, поки останній клієнт відгукнеться (жахлива ідея, якщо у однієї людини є повільний комп'ютер), почекати, поки перший клієнт відповість (знову ж, чекаю спілкування перед кожним кадром), або просто надішлю їх якомога швидше (що здається, стикається з тим же питанням, що і номер 1).
На початку гри попросіть сервер повідомити клієнтам, як швидко оновитись. Це означало б, що клієнт несе відповідальність за обмеження руху між цим часовим періодом. Наприклад, якщо комусь якось вдалося натиснути кнопку двічі протягом цього періоду, він надішле лише одну кнопку натискання кнопки. У зв'язку з цим виникає проблема, що деякі дії будуть ігноровані (наприклад, подвійне натискання кнопки), і що взаємодія буде покладатися на годинник клієнта, який може не відповідати часу сервера. Тоді сервер повинен буде відслідковувати кожного клієнта та стежити, щоб його оновлення надходили в потрібний час.
Я провів деякі дослідження , але статті, які я читав, здається, не стосуються конкретних питань, що робити, якщо клієнт надсилає оновлення швидше, ніж інші клієнти.
У моєму конкретному випадку я маю справу з людьми, які мають більші швидкості клавіатури (їхній комп'ютер надсилатиме більше оновлень клавіатури, ніж інші комп'ютери).
Як програмісти зазвичай справляються з цим?