Відповіді:
Як можна використовувати файли для відстеження позицій гравців?
Ви записуєте позицію програвача у файл. Наприклад, якщо ви ідентифікуєте кожного гравця з унікальним номером (або GUID), ви можете використовувати це як ім'я файлу. У файл просто запишіть дані про позицію у форматі, який ви зможете проаналізувати пізніше. Наприклад, 467239.txt
може містити, 20, 3, 19
якщо гравець № 467239 знаходиться в цьому ( x, y, z ) місці.
Це не так відрізняється від того, що ви робили б із базою даних, однак - при цій операції база даних не повинна бути «повільною», вона повинна бути дуже швидкою (ймовірно, швидше, ніж файли, тому що у вас є більше накладних дискових вводів IO або блокування IO суперечка - якщо ви зберігали кілька позицій на файл - у підході на основі файлової системи).
Можливо, ви намагалися використовувати БД або файлову систему для зберігання позиції гравця під час виконання ? Ви взагалі не повинні цього робити .
Під час виконання на вашому сервері позиції гравців повинні зберігатися в пам'яті та оновлюватися там, як це робиться з будь-яким іншим видом гри. Періодично їх можна зберігати на диску чи іншому постійному сховищі - наприклад, коли плеєр відпочиває, зберігає або виходить із системи.
Але писати позицію кожного гравця для зберігання кожного оновлення є непотрібним і вкрай неефективним; він ніколи не буде достатньо швидким, щоб впоратися з чим-небудь, що нагадує "масивні" масштаби гравців.
Позиція повинна бути в оперативній пам'яті під час використання. (напр .: персонаж гравця у світі) Ви не можете використовувати БД як оперативну пам'ять. Ну ти можеш, але це буде жахливо.
Ви повинні зберігати позиції регулярно, але не кожного разу, коли вони змінюються.
Я б також уникав збереження всіх позицій одночасно. Якщо ви хочете зберегти наполегливість у випадку аварії на сервері, ви повинні зберігати позицію якомога частіше, але у вільний час гри. Просто робіть це партіями.
Збережіть 30 позицій, поки вільний час доступний.
Що стосується клієнтів. Вони повинні отримувати (відповідні) оновлення стану ігор через підключення до вашого серверного програмного забезпечення. Не від БД ... Це було б непрактично, повільно, погано, зло і сила буде порушена.
У мене є окремий потік, в який я чержу, щоб зберегти у файлах кожні 500 ігор гри. В іншому випадку слід зберігати все в оперативній пам’яті.
Що я роблю на своєму сервері, це зберігати напрямок (вектор) гравців та останню позицію, якщо гравець має швидкість, я розраховую нову позицію гравців кожні 2 секунди.
Клієнт має свою позиційну позицію, звичайно, і відправляє його новий напрямок (вектор) на сервер.
Сервер є авторитетним щодо позиції та надсилає пакет позицій, якщо клієнт перемістив певну відстань з моменту останньої перевірки (це може призвести до того, що ефект гумки не синхронізується).
Все це відбувається на згадку, звичайно.