Ağa bağlı bir oyun için bir varlık sistemi üzerinde çalışıyorum ve ben her varlık varlık ve varlıkların kendilerine referans serileştirmek için kullanabileceğiniz benzersiz bir 32 bit tamsayı kimliği atarım.
Şu anda bir varlık her oluşturulduğunda bir sayacı artırıyorum. Tahminimce kimlikler bitecek ama gerçekten 4 milyar varlık olmasını beklemiyorum. Ayrıca, # 5 varlığı yok edilirse ve 5 kimliği alırsak bu da sorunu önler. Yeni # 5'e veya eski 5 numaralı silindiğine mi işaret etmek gerekiyor?
Sorun şu ki, çarpışmaların nasıl ele alınacağından / kaçınacağından emin değilim. Şu anda bir müşteri mevcut "serbest kimlik" değerinden daha yüksek bir kimliği olan bir varlık için bir güncelleme alırsa, ücretsiz kimliği o zamana kadar çarpar. Ancak bu pek sağlam görünmüyor.
Her müşteriye aralık atamalarını düşündüm, böylece çakışmadan varlıkları tahsis edebilirler (en iyi n bitin oyuncu numarası olduğunu söyleyebilirim), ancak aralıklar zamanla çakışmaya başlarsa ne olacağı konusunda endişeliyim.
Bunu ele almanın daha iyi bir yolu var mı? Taşan veya izin verilen aralığın sonunu aşan kimlikleri bile önemsemeli miyim? Bu durumları tespit etmek için kod ekleyebilirim ama kilitlenme dışında olsaydı ne yapardı.
Başka bir seçenek, 128 bitlik bir GUID gibi benzersiz olma şansı daha yüksek olan bir şey kullanmaktır, ancak ağ trafiğini en aza indirmeye çalışan bir oyun için gerçekten ağır görünüyor. Ayrıca, gerçekçi olarak, bir seferde asla daha fazla objeye ihtiyacım olmazdı, o zaman 32 bit veya 24 bit tam sayıya sığardı.
Teşekkürler!