Jawaban:
Bagaimana file dapat digunakan untuk melacak posisi pemain?
Anda menulis posisi pemain ke file. Misalnya, jika Anda mengidentifikasi setiap pemain dengan nomor unik (atau GUID), Anda bisa menggunakannya sebagai nama file. Dalam file, cukup tulis data posisi dalam format yang dapat Anda parse nanti. Misalnya, 467239.txt
mungkin berisi 20, 3, 19
jika pemain # 467239 berada di lokasi ( x, y, z ) itu.
Ini tidak jauh berbeda dari apa yang akan Anda lakukan dengan database, namun - database tidak boleh "lambat" pada operasi ini, itu harus sangat cepat (mungkin lebih cepat daripada file, karena Anda memiliki lebih banyak overhead IO disk atau penguncian IO pertengkaran - jika Anda menyimpan banyak posisi per file - dalam pendekatan berbasis sistem file).
Mungkin Anda mencoba menggunakan DB atau sistem file untuk menyimpan posisi pemain saat runtime ? Anda seharusnya tidak melakukan ini sama sekali .
Saat runtime, di server Anda, posisi pemain harus disimpan dalam memori dan diperbarui di sana, seperti yang akan Anda lakukan dengan jenis permainan lainnya. Secara berkala mereka dapat disimpan ke disk atau penyimpanan persisten lainnya - misalnya, ketika pemain beristirahat, menyimpan, atau logout.
Tetapi menulis setiap posisi pemain untuk menyimpan setiap pembaruan tidak perlu dan sangat tidak efisien; itu tidak akan pernah cukup cepat untuk menangani apapun yang menyerupai skala pemain "besar".
Posisi harus dalam RAM saat digunakan. (mis: karakter pemain ada di dunia) Anda tidak dapat menggunakan DB sebagai memori operasi. Anda bisa, tetapi ini akan mengerikan.
Anda harus menyimpan posisi secara teratur, tetapi tidak setiap kali mereka berubah.
Saya juga akan menghindari menyimpan semua posisi pada saat yang bersamaan. Jika Anda ingin mempertahankan kegigihan jika server crash, Anda harus menyimpan posisi sesering mungkin tetapi pada waktu luang permainan. Cukup lakukan ini secara batch.
Hemat 30 posisi saat waktu luang tersedia.
Adapun klien. Mereka harus menerima pembaruan kondisi game (relevan) melalui koneksi ke perangkat lunak server Anda. Bukan dari DB ... Itu tidak praktis, lambat, buruk, jahat dan kekuatan akan terganggu.
Saya memiliki utas terpisah yang saya antri untuk menyimpan ke file setiap 500 atau lebih kutu game. Jika tidak, Anda harus menyimpan semuanya dalam RAM.
Apa yang saya lakukan di server saya, adalah untuk menyimpan arah pemain (vektor) dan posisi terakhir, jika pemain memiliki kecepatan, saya menghitung posisi pemain baru setiap 2 detik.
Klien tentu saja memiliki posisi posisi sendiri dan mengirimkannya arah baru (vektor) ke server.
Server otoritatif tentang posisi dan mengirim paket posisi jika klien bergerak jarak tertentu sejak pemeriksaan terakhir (ini dapat menyebabkan efek karet gelang adalah klien tidak sinkron).
Semua ini tentu saja terjadi dalam ingatan.