İstemci tarafı tahmini ile gerçek zamanlı rastgele hareket nasıl ele alınır


10

İstemci ve sunucuda aynı 'fizik' döngüsünü çalıştıran gerçek zamanlı çok oyunculu bir oyun oluşturuyorum. Ben esas rasgele hareket olan 'dolaşmak' bir direksiyon davranışı kullanıyorum. İstemci ve sunucu, gezinme algoritmalarını çalıştırırken farklı Rastgele sayılar oluşturur.

Doğal olarak rastgele görünümlü bir hareketi nasıl koruyabileceğimi merak ediyorum, ancak istemci ve sunucunun aynı sonuca varmasını sağlayacak bazı sabitleri kullanıyorum.


4
Aynı rasgele sekansı bir sahte rasgele sayı sekansından oluşturmak kolaydır. Zor olan şey, bu dizinin kullanımını senkronize etmektir. Rastgele bir dizi kullanmamanız değil, rastgele diziyi deterministik bir şekilde kullanmanız anlamında değil, oyun mantığınızı deterministik yapmalısınız. Bunu başarmanın en kolay yolu genellikle oyun mantığı döngüsünde herhangi bir eşzamanlılıktan kaçınmaktır, ancak iş parçacıkları PRNG'nin rasgele bir değer istediği zaman PRNG'nin zamanlamasına ve sıralamasına bağlı olmadığı sürece eşzamanlılık elde etmek mümkündür. İşte ejderha ol.
Yalan Ryan

Yanıtlar:


14

Rastgele tohum kullanabilirsiniz . Sunucuda ve istemcide aynı 32 bit değeri seçin (veya sunucu başlangıçta istemciye gönderebilir). Rastgele jeneratör için tohum olarak kullanın. Oyun durumu güncellemesi ile gerçek çekirdeği sunucudan istemciye gönderebilirsiniz. Göndermek istemiyorsanız, istemci ve sunucunun bu rastgele oluşturucu tarafından aynı sayıda rasgele sayı ürettiğinden emin olmalısınız.

Müşteriye gerçek tohum göndermemeye karar vermeden önce bilmeniz gerekenler:

  • İstemcide karakter kaldırma ile ilgili sorunlarınız olacak (yani, istemcide bir savaş sisi içinde karakterleri derinlemesine işlememeniz anlamına gelir). Eğer karakter culling yapmak istiyorsanız en iyi karar tüm karakter durumu (gerçek tohum ile) istemcinin karakteri işlemek gerektiğinde sunucudan istemciye göndermek olacaktır. Bu nedenle, sunucu istemcinin karakteri ne zaman işlemesi ve ne zaman işlememesi gerektiğine karar vermelidir. Her karakter için ayrı rastgele oluşturucular kullandığınızdan emin olun.
  • AI problemleri için de aynı sorun olacak.
  • Bu rastgele üretecin rastgele sayısı yalnızca sabit zaman deltasıyla güncellenerek oluşturulmalıdır. Oluşturmadan önce AI enterpolasyonu için rasgele rakam kullanmak istiyorsanız, ayrı rasgele jeneratör kullanmalısınız (sunucuda render yok, bu yüzden hangi tohumu kullanacağınız umurumda değil).
  • İstemci ve sunucu için farklı platformlar kullanmak istiyorsanız (örneğin, C ++ ve Java), çapraz platform rasgele oluşturucuyu uygulamalısınız (veya bulmalısınız). Bu büyük bir sorun değil, çünkü rastgele jeneratörlerin uygulanması kolay.

3

Hem sunucu hem de istemci tohum üzerinde anlaşırsa, çoğu rasgeleleştirme algoritması aynı değerleri verir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.