Saya sedang bekerja pada sistem entitas untuk game jaringan dan saya menugaskan setiap entitas id integer 32-bit unik yang bisa saya gunakan untuk membuat cerita bersambung referensi ke entitas dan entitas itu sendiri.
Saat ini saya hanya menambah penghitung setiap kali entitas dibuat. Saya kira id pada akhirnya akan habis tetapi saya tidak benar-benar berharap untuk memiliki 4 miliar entitas. Ini juga menghindari masalah jika entitas # 5 dihancurkan dan kita mendapatkan id 5. Apakah ini dimaksudkan untuk merujuk ke yang baru # 5 atau yang lama dihapus # 5?
Masalahnya adalah saya tidak yakin bagaimana menangani / menghindari tabrakan. Saat ini jika klien menerima pembaruan untuk entitas dengan id lebih tinggi daripada "id bebas" saat ini, ia hanya menabraknya id gratis hingga melewati itu. Tapi itu tampaknya tidak terlalu kuat.
Saya berpikir tentang mungkin menetapkan rentang untuk setiap klien sehingga mereka dapat mengalokasikan entitas tanpa konflik (katakanlah n bit atas adalah nomor pemain) tetapi saya khawatir tentang apa yang terjadi jika rentang mulai tumpang tindih dari waktu ke waktu.
Apakah ada cara yang lebih baik untuk menangani ini? Haruskah saya peduli dengan id yang meluap atau melewati batas kisaran yang diizinkan? Saya bisa menambahkan kode untuk mendeteksi kasus-kasus ini tetapi apa yang akan dilakukan jika terjadi selain crash.
Pilihan lain adalah menggunakan sesuatu dengan peluang lebih tinggi untuk menjadi unik seperti GUID 128-bit tetapi tampaknya sangat berat untuk gim yang mencoba meminimalkan lalu lintas jaringan. Juga, secara realistis saya tidak akan pernah membutuhkan lebih banyak entitas pada satu waktu kemudian akan masuk ke dalam integer 32-bit atau bahkan 24 bit.
Terima kasih!