Я намагаюся впровадити систему фізики клієнт / сервер за допомогою Bullet, однак у мене виникають проблеми з синхронізацією.
Я реалізував спеціальний стан руху, який читає і записує перетворення з моїх ігрових об'єктів, і він працює локально, але я спробував два різних підходи для мережевих ігор:
- Динамічні об'єкти клієнта, які також є на сервері (наприклад, не випадкові сміття та інші незначні речі), стають кінематичними. Це працює правильно, але об’єкти рухаються не дуже плавно
- Об'єкти динамічні для обох, але після кожного повідомлення від сервера про те, що об’єкт перемістився, я встановлюю лінійну та кутову швидкість до значень із сервера і викликаю btRigidBody :: procedToTransform з перетворенням на сервері. Я також закликаю btCollisionObject :: activate (true); змусити об’єкт оновити.
Моя мета 2 методу полягала в тому, щоб в основному зробити метод 1, але викрадення кулі робити передбачення бідолахи, а не робити власне, щоб згладити метод 1, але це, здається, не працює (з причин, які не на 100% зрозумілі для я навіть переступаю через кулю) і об’єкти іноді опиняються в різних місцях.
Я рухаюся в правильному напрямку? Здається, у кулі вбудований власний інтерполяційний код. Чи може це допомогти мені зробити так, щоб метод 1 працював краще? Або мій код 2 методу не працює, тому що я випадково тупою цим?
EDIT: Ще одна проблема з методом 1, яку я щойно помітив, полягає в тому, що реакція на зіткнення буде можливою для зіткнень з несинхронізованими об'єктами. Кінетичні тіла начебто стріляють речі до нескінченності іноді, оскільки їх неможливо відбити назад.