Online Oyunda Oyuncuların Birbirini Görmesi (Beyin Fırtınası)
-
Konuyu Java bölümüne açmamın nedeni javada çalışma yapmak istememdendir.
konuyu özetlemek gerekirse.
Darkorbit, seafight, PWO, Mmorpg tarzı oyunlarda oyuncular belirli bir alana girince birbirlerini görüyorlar.
bu işin server ve client tarafı nasıl çalışıyor.
kafamda bir kaç algoritma tasarladım. ama server çok kasılıyor. bunun asıl işi nasıl olur bilen arkadaşlar bu konu hakkında açıklama yapabilir mi?
fikirleriniz benim için önemli atladığım bir detayı görebilirim.
-
güzel soru google'a kısaca bir baktım ancak derli toplu birşeye denk gelmedim. bakalım bilenler bilmeyenlere izah etsin durumuda bizde nasiplenelim.
-
hard-core programing, up olsun
-
X'in ve Y'nin konumunu sunucu bilir. X, Y'ye yakınsa sunucu X'e Y'nin, Y'ye X'in konumunu gönderir.
-
YeniHarman bunu yazdı
X'in ve Y'nin konumunu sunucu bilir. X, Y'ye yakınsa sunucu X'e Y'nin, Y'ye X'in konumunu gönderir.
10 Kişilik bir oyun için ideal, 1000 kişi için sunucu her defasında kontrol mü? edecek kim kime yakın diye ?
-
Öncelikle işin network tarafını yönetmek için aşağıda ki gibi özelleşmiş servisler kullanıyorlar. Bu servisler aynı zamanda 7/24 çalışan NPC'leride yönetebiliyor. Bunların api'lerinde aradığın sorunun cevabı olabilir.
-
DuPi bunu yazdıYeniHarman bunu yazdı
X'in ve Y'nin konumunu sunucu bilir. X, Y'ye yakınsa sunucu X'e Y'nin, Y'ye X'in konumunu gönderir.
10 Kişilik bir oyun için ideal, 1000 kişi için sunucu her defasında kontrol mü? edecek kim kime yakın diye ?
herkesin konumunu elinde tutmazsan. speed hack,teleport hack ve benzeri şeylerle baş edemezsin.
konu hakkında detaylı bilgi için mevzuyu bir game developer arkadaşa sorim.
-
FCN bunu yazdıDuPi bunu yazdıYeniHarman bunu yazdı
X'in ve Y'nin konumunu sunucu bilir. X, Y'ye yakınsa sunucu X'e Y'nin, Y'ye X'in konumunu gönderir.
10 Kişilik bir oyun için ideal, 1000 kişi için sunucu her defasında kontrol mü? edecek kim kime yakın diye ?
herkesin konumunu elinde tutmazsan. speed hack,teleport hack ve benzeri şeylerle baş edemezsin.
konu hakkında detaylı bilgi için mevzuyu bir game developer arkadaşa sorim.
Yeni harmana demek istediğim farklı,
herkesin koordinatı olması gerekiyor. bu zaten şart ama bunları karşılaştıran serveri yormayan bir kod peşindeyim. :)
kendi fikirlerinizi yazmanızı istememin sebebi birşey bulamazsak kendimiz bir algoritma geliştiriz.
-
Sunucu herkesin koordinantını bilir bunda bir sıkıntı yok. Ama herkesin koordinantlarını birbirleri ile karşılaştırmaz muhtemelen. Çünkü sunucuda N kişi varsa
N!
--------------- = X
(n-2)!*2!X tane ikilinin arasındaki mesafeyi hesapası lazım ki bu da anlık olacak. Ki bu ikilileride eşleştirmesi için gereken sürede ayrı bir muazzam.
Yani sunucu 1000 kişi olsa
1000*999/2 = 249.750 İkilinin arasındaki mesafeyi hesap edecek ki cidden büyük bir rakam.
Diğer bir yandan;
Client'te sunucunun gönderdiği ölçüde etrafındaki oyuncuların koordinantlarını bilir. Bu genellikle client'in render yapacağı alan kadardır ya da client'ın bulunduğu sunucudaki en küçük alt kümedeki alan kadardır.
Client bu alanlar içinde bulunan oyunculardan hangileri arkadaşı ise o arkadaşı ile arasındaki mesafeyi hesaplar ve yakın olanları sunucuya bildirir. Sunucuda doğruluğunu hesaplar ve birbirlerini görmesi için izin verir.
Benim yorumlamam bu kadar hadi hayırlı işler.
DrKill tarafından 04/Kas/14 16:37 tarihinde düzenlenmiştir -
DrKill bunu yazdı
Sunucu herkesin koordinantını bilir bunda bir sıkıntı yok. Ama herkesin koordinantlarını birbirleri ile karşılaştırmaz muhtemelen. Çünkü sunucuda N kişi varsa
N!
--------------- = X
(n-2)!*2!X tane ikilinin arasındaki mesafeyi hesapası lazım ki bu da anlık olacak. Ki bu ikilileride eşleştirmesi için gereken sürede ayrı bir muazzam.
Yani sunucu 1000 kişi olsa
1000*999/2 = 249.750 İkilinin arasındaki mesafeyi hesap edecek ki cidden büyük bir rakam.
Diğer bir yandan;
Client'te sunucunun gönderdiği ölçüde etrafındaki oyuncuların koordinantlarını bilir. Bu genellikle client'in render yapacağı alan kadardır ya da client'ın bulunduğu sunucudaki en küçük alt kümedeki alan kadardır.
Client bu alanlar içinde bulunan oyunculardan hangileri arkadaşı ise o arkadaşı ile arasındaki mesafeyi hesaplar ve yakın olanları sunucuya bildirir. Sunucuda doğruluğunu hesaplar ve birbirlerini görmesi için izin verir.
Benim yorumlamam bu kadar hadi hayırlı işler.
hocam herkesin arasındaki mesafeyi hesaplamaya gerek yok. senin karakterin yürüdü diğelim oyunda 1000 kişi var diğer karakterler ile yani 999 tane işlem yapıp yakındakileri buluyor. zaten bütün oyunu taramasına gerek yok farklı regiona giren elemanları neden tarasın. region ve kordinat verisi ile gruplama yapıp kolayca hesaplarsın.
bu arada baştanmı oyun yapıyorsunuz emulator flnmı ?
detCode tarafından 04/Kas/14 16:41 tarihinde düzenlenmiştir -
detCode bunu yazdıDrKill bunu yazdı
Sunucu herkesin koordinantını bilir bunda bir sıkıntı yok. Ama herkesin koordinantlarını birbirleri ile karşılaştırmaz muhtemelen. Çünkü sunucuda N kişi varsa
N!
--------------- = X
(n-2)!*2!X tane ikilinin arasındaki mesafeyi hesapası lazım ki bu da anlık olacak. Ki bu ikilileride eşleştirmesi için gereken sürede ayrı bir muazzam.
Yani sunucu 1000 kişi olsa
1000*999/2 = 249.750 İkilinin arasındaki mesafeyi hesap edecek ki cidden büyük bir rakam.
Diğer bir yandan;
Client'te sunucunun gönderdiği ölçüde etrafındaki oyuncuların koordinantlarını bilir. Bu genellikle client'in render yapacağı alan kadardır ya da client'ın bulunduğu sunucudaki en küçük alt kümedeki alan kadardır.
Client bu alanlar içinde bulunan oyunculardan hangileri arkadaşı ise o arkadaşı ile arasındaki mesafeyi hesaplar ve yakın olanları sunucuya bildirir. Sunucuda doğruluğunu hesaplar ve birbirlerini görmesi için izin verir.
Benim yorumlamam bu kadar hadi hayırlı işler.
hocam herkesin arasındaki mesafeyi hesaplamaya gerek yok. senin karakterin yürüdü diğelim oyunda 1000 kişi var diğer karakterler ile yani 999 tane işlem yapıp yakındakileri buluyor. zaten bütün oyunu taramasına gerek yok farklı regiona giren elemanları neden tarasın. region ve kordinat verisi ile gruplama yapıp kolayca hesaplarsın.
sunucu sadece senin karakterin için hesaplama yapmayacak ki? Her karakterin birbirini görebileceği diğer karakterleri bulmak zorunda. Sunucu sadece 1 oyuncuya ait gösterilebilir kişileri hesap etmez.
Ayrıca region veya oyun demenin bir anlamı yok aynı region dada 1000 kişi olabilir(türüne göre değişebilir) ki wow gibi oyunlarda çok daha fazla kişiler alanlarda savaşıyor. Bu hesabın tamamının sunucu tarafından yapılması saçmalık olur.
Örnek vereyim. Sunucudaki oyuncular a,b,c,d,e,f,................................,n
n=1000 diyelim. Region daki ya da oyundaki fark etmez. 1000 kişi eşlenir alanda diyelim.
Sunucu a oyunucusu ile diğer oyuncuların arasındaki mesafeleri hesaplar (n-1) tane.
n-1 tane hesaptan hangisi belirtilen mesafenin altındaysa a kişi o kişileri o kişilerde a kişisini görebilir.
Şimdi b playerına geldi. b playerı ile diğer oyuncuların arasındaki mesafeleri hesaplar (n-1) tane.
n-1 tane hesaptan hangisi belirtilen mesafenin altındaysa b kişi o kişileri o kişilerde a kişisini görebilir.
...................................................
Her player için bu işlem anlık yapılırsa süpercomputer'a gerek var demektir bence.
Counter strike gibi max 100 kişinin olduğu sunucularda bile (devasa online oyunlara örnek DEĞİLDİR!) client tarafı herkesin koordinantlarını bilir. O wallhack ler vs. var ya işte, client'ın göstermediği koordinantları gösteren dll ler ile yapılıyor. Böyle küçük oyunlarda bile client lar koordinantları bilirken muazzam büyük oyunlarda bilmemesi saçma olur.
Bazı özel konularda, özel isteklerde her işi sunucu hesaplamaz, iş yüklerini clientlerada yüklenmek zorundadır geliştiriciler. Tabi bunu son kullanıcıya fark ettirmeden yaparlar.
DrKill tarafından 04/Kas/14 17:04 tarihinde düzenlenmiştir
