Я впроваджую ігровий сервер, який підтримує Starle-подібний ближній біт . Таким чином, у вас є судна, які летять і стріляють, із супер простою швидкістю / прискоренням / загасанням фізики для керування рухом.
Я читав Valve, Gafferon і Gambetta і реалізував алгоритм Gambetta для прогнозування клієнтів:
Клієнтське передбачення працює на програвачі гравця, оновляючи його позицію з сервера по мірі його надходження, а потім повторно застосовуючи ще не оброблений сервером вхід на гру програвача.
На жаль, це не дуже добре працює для моєї гри. Я вважаю, що це пов'язано з тим, що приклад Gambetta не враховує об'єкти, які вже рухаються, або команди, що оновлюються поетапно. (під "кроком" я маю на увазі кадр). Тож у моїй грі гравець натискає, щоб прискорити (вже рухається) корабель, який продовжує рух по клієнту, відправляє команду на сервер і, як правило, отримує світовий знімок з сервера на наступному кроці. Я отримую щось більше на кшталт:
Команда гравця виконується на кроці 3 клієнта , але на сервері виконується лише на кроці 5 сервера . На момент отримання клієнтом світового знімка на етапі 6 клієнта прогнозування закінчується, особливо на більш швидких швидкостях.
Суть проблеми полягає в тому, що клієнт виконує команду на кроці 5 , але сервер виконує її на етапі 6 . Я подумав над тим, щоб, можливо, відправити клієнтський крок із командою, і змусити сервер відкататись та запустити команду з кроком часу клієнта. Це може призвести до ряду інших проблем - як, наприклад, що відбувається з командами, отриманими з моменту відкату, або як клієнти-обмани можуть скористатися, змінивши надісланий крок.
Читання і перегляд відео , як цей від Google згадує інший підхід, при якому ви поступово змінити позицію гравця, що збігається з знімка за кілька кроків.
Мої запитання:
Чи можете ви змусити алгоритм Gambetta працювати з постійним кроковим рухом? Або це концептуально несумісне з моєю грою?
Чи поступова інтерполяція через кроки - це правильний шлях? Якщо так, як ви інтерполюєте вже переміщуваний об’єкт з позиції клієнта, щоб він відповідав тому, що щойно отриманий від сервера?
Чи можуть ці методи, поступова інтерполяція та алгоритм Гамбетти працювати в тандемі чи вони взаємовиключні?