Я працюю над дворівневою ігровою системою багатокористувацької гри 2 сервер-клієнт (яку ви можете спробувати тут ). Він використовує WebRTC DataChannel
s. (З'єднання однорангові, але хост-рівномірний все ще діє як сервер.)
Найбільша проблема (крім підключення) - передбачення локального вводу. Ми робимо звичайне: при натисканні клавіш гравці миттєво рухаються, повідомляють господареві, які клавіші натискаються, отримують дані від хоста і порівнюють їх з історичною позицією. Позиція виправляється з часом, якщо є різниця. Це добре працює з низькими втратами пакетів або ПДВ , навіть якщо ping великий.
Якщо є збитки або ПДВ, відхилення можуть бути більшими. Я думаю, це тому, що якщо перший пакет із зазначенням зміни входу затримується або відпадає, хост дізнається пізніше і починає змінювати програвача пізніше, ніж показує їх місцевий вхідний прогноз.
Якщо гравець рухається, ми відкручуємо суму застосованої корекції, оскільки це менш помітно. Це, здається, приховує прогалини під час початку руху та під час руху. Однак будь-яке виправлення помітніше, якщо вони різко зупиняються. Тоді, якщо ПДВ або втрата означає, що хост вважає, що вони зупинилися пізніше, хост перестає зніматися, надсилає назад дані, кажучи, що вони трохи далі вперед, і виправлення змушує плеєра трохи дрейфувати. На нестійких з'єднаннях гравці часто помітно дрейфують після зупинки.
Я цього не помічав в інших іграх. Як це можна пом'якшити?