Gönderen Konu: Karakter Hareketi  (Okunma sayısı 21240 defa)

Karakter Hareketi

« : 27.02.2012 16:59:26 »
Hızlı düğmeleri aç

paradox

İleti: 134

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
selam.
server-client  karakter hareketi için uygun bi yöntem arıyorum..
mesela  oyundaki  karakterden biri  fareyle herhangi bi yere tıkladı..Bu  durumda clientlere fareyle basılan koordiantları(x-z) gönderip ilk  pozisyon ile vektörü oluşturup clienlerde hareketi oluşturayım  diyorum(yanlış bi yolda olabilir)
Fakat y koordinatındaki değişimler için nası bi yöntem olabilir sizce.?..
mesela  eleman girintili çıkıntılı bi arazide koşturuken y side sürekli  değişiyor..her saniye pozisyon bilgilerini göndermekte iyi bi fikir  değil sanırsam.

Karakter Hareketi

« Yanıtla #1 : 27.02.2012 21:49:52 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
once su basliktaki cevaplara bir goz at, daha cok sync olayi anlatiliyor ama pozisyon ve zamanlama beraber halledildigi icin isine yarar (yalniz orada benim cevabimda senin y dedigin dikey eksene ben z diyorum cevirimi yaparsin)

y degisimleri icin alman gereken ilk karar su: oyun dunyanda bir (x,z) icin oyuncunun olabilecegi farkli y'ler var mi? yani mesela iki katli bir bina veya hem altindan hem ustunden gecilebilen bir kopru. yani ayni x,z deki bir oyuncu birinci katta iken baska bir oyuncu ikinci katta olabilir mi? eger oyun dunyasinin tasarimini buna izin vermeyecek sekilde yaparsan isin kolaylasir. o zaman server'da sadece dunyayi 2 boyutlu tutarsin (her oyuncu ve obje icin sadece bir xz tutarsin). y koordinati icin ise clientta bir height map tutabilirsin. yani x ve z icin sana y degerini donduren bir tablo.

eger iki katli binalar olayina izin vereceksen, o zaman isin biraz daha zor. oyunda hileleri engellemek icin y pozisyonunu da serverda tutmayi tercih edebilirsin. ya da eger kat sayisi 2-3-4 gibi nispeten dusuk birsey ise, server da tam y yuksekligini degil de hangi katta olundugunu integer olarak tutabilirsin. ve clienta oyuncu (37, 321) xz pozisyonunda ve su an 2. katta gibi bi bilgi gonderebilirsin. clientta birkac kat icin birkac height map tutarsin. client dogru katin height mapini kullanarak oyuncuyu yerlestirir. boylece "ikinci kat" aslinda degisik y yuksekliklerine sahip engebeli bi yer olabilir (mesela merdiven basamaklari gibi)

Karakter Hareketi

« Yanıtla #2 : 27.02.2012 22:11:37 »
Hızlı düğmeleri aç

paradox

İleti: 134

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
anladım..diğer başlığıda inceleyeceğim..
Peki online oyunlarda atıyorum bi grup oyuncu var biraz uzaktada başka bi grup var..Bunların konuşmaları veya hareketleri falan diğer uzaktaki oyunculara gönderilmiyo sanırsam yada bir köydeki oyuncular öbür köydekilerden habersiz oluyor..Oyuncular servera bilgilerini gönderiyor ama server bu oyunculardaki mesafeye göremi gönderip göndermeyeceğine karar veriyor?.

Karakter Hareketi

« Yanıtla #3 : 28.02.2012 01:17:00 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
@paradox: aslında bu son söylediğin şey tahmin edebileceğin gibi tamamen sen nasıl istersen öyle oluyor. ben iyi bir MMO oyuncusu değilim. şu ana kadar 3 tane MMO oynadım. ılk göz ağrım ıstanbul Kıyamet Vakti'dir (ıKV). Bunun haricinde WoW ve şu sıralar ise Star Wars The Old Republic oynuyorum. Genel olarak yapı şu şekilde. Ortaya konuştuğunda yakındaki playerlar konuştuklarını duyuyor. Haritayı tek parça olarak düşünmek zaten mümkün değil. ılla ki gridlere ya da başka vektörel parçalara böleceksin. Diyelim ki gridlere böldün. En basitinden oyuncunun bulunduğu ya da oyuncunun bulunduğu + komşu 8 bölge gibi bir alanda yer alan oyuncuların duymasını sağlayabilirsin. Ya da oyununun yapısı zaten makul boyutta haritalardan oluşuyorsa o anki bölgedeki tüm oyuncular şeklinde düşünebilirsin olayı. ıKV'de tüm servera mesaj atma seçeneği de var örneğin. Ama bunun için plus paketi satın almak gerekiyor. Diğer MMO'ların çoğu zaten paralı. ıKV bedava olduğu için diğerlerinden böyle bir farkı var. Yani bu tüm server'a mesaj atma olayı Türklerde patlar, millet server'ı allak bullak eder endişen varsa, ıKV'nin izlediği yolu izleyebilirsin. Anonymous oyuncular en fazla çok yakın çevresini rahatsız edebilsin. Paketi satın almış daha ciddi (ve daha önemlisi kim olduğu belli, paketi iptal edilebilir ya da daha kolay cezalandırılabilir) oyuncular ise tüm server'a mesaj atma hakkına sahip olsun.

Tabii bunun dışında özel mesaj, grup içi mesaj, guild içi mesaj v.s. v.s. birçok alternatif mesajlaşma sistemini de düşünmek durumundasın.

Benim 3 MMOluk tecrübem bu kadar cevap vermeme olanak tanıyor. Eminim daha detaylı bilgi verecek kişiler çıkacaktır.

Bu arada koordinat sistemine gelince x,z diye kullanıyor olman z'nin gerçekten derinlik şeklinde algılanmasından dolayı normal. Ancak bu tür oyunların çoğu aslında %90 2d olarak oynanırlar. Elbette ki tepenin arkasındakini görememe v.b. birçok 3. boyutu içeren detaylar mevcuttur. Nightlord'un bahsettiği levellı mantık da aynen çoğu oyunda geçerlidir. Ancak Star Wars - The Old Republic'de katlar olmasına rağmen harita bence %100 2d olarak modellenmiş. Aynı yine Nightlord'un bahsettiği ek bir parametre daha var levellar için. Öyle ki merdivenlerden belli bir seviyeye çıkınca map komple değişiyor. Yani adamlar aslında "kat" değil "harita" parametresi tutuyorlar. "x", "y" ve "map id". bu "map id"yi ister farklı katlar, isterlerse de player'ı alternatif boyuta geçirmek, portallar v.s. için kullanabilirler. Yani ben ciddi anlamda MMORPG kodlamak gibi manyakça (! ;)) bir işe girişecek olsam, kesinlikle "x", "y", "map id" ve oyunu geliştirdikçe karşıma çıkacak özel durumlar için gerekecek birkaç parametre daha kullanırdım.

Bu arada senin yapmaya çalıştığın mouse ile tıkladığın noktaya giden MMO modeli çok daha kolay uygulanabilir bir model. Bu modelden şaşmamanı, WASD olayına mümkünse girmemeni öneriyorum. Yoksa çok daha fazla sorunla mücadele etmen gerekiyor. Diğer topiclerde tartışmıştık daha önce.

Karakter Hareketi

« Yanıtla #4 : 28.02.2012 01:45:18 »
Hızlı düğmeleri aç

pulkanat

İleti: 6

Çevrimdışı
  • *
  • Newbie
    • Profili Görüntüle
Aşağıdaki videoda 20. ve 25. dakikalar arasında amcam biraz anlatmış oyuncuları gruplara bölme hadisesini.

http://www.youtube.com/watch?v=tKSYJYV_RGs

Ama çok nefes nefese konuşuyor o ayrı...

Karakter Hareketi

« Yanıtla #5 : 28.02.2012 03:12:04 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
paradox: chat olayini skate detayli anlatmis, chat disindaki olaylar (hareketler, buyu atmalar vs.) da tahmin ettigin gibi cogunlukla yakinlik tabanli olarak serverdan clientlara atiliyor. bu "yakinliga bagli" haber kavramini gerceklestirmek icin degisik algoritmalar kullanilabilir tabi. grid tabanli olabilir, yaricap tabanli olabilir. biribirini gorebilen odalar mantigi olabilir. ama ana noktada haklisin,bir client'a sadece gerebilecegi baska oyuncu ve npc'lerin bilgilerini gondermek mantiklidir

Karakter Hareketi

« Yanıtla #6 : 29.02.2012 15:51:51 »
Hızlı düğmeleri aç

paradox

İleti: 134

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
teşekkürler yardımlar için..
skate  : WASD olayına girmiştim , dediğin gibi çok fazla sorun çıkıyo ortaya..
Bu arada sadece bişeylerle uğraşmak için ( gaz dönemi ) yapıyorum..Tabi olucaksada Warcraftın Frozen throne eklentisindeki d.o.t.a tarzı bi oyun olabilir..Tabi ben yapamamda diğer büyük online oyunlara nazaran daha kolay gibi..

Karakter Hareketi

« Yanıtla #7 : 29.02.2012 17:02:02 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
@paradox: Aslında basit bir MMO elbette ki yapılabilir. Hem de konusuz bir biçimde karakterlerin gezinip duvarların içinden geçtiği bir MMO temeli bir iki günde de atılır, kod da hiç atla deve olmaz. Ancak bir aşamadan sonra karşılaşılan tüm problemler;

a) Client tarafında çözersin ve hacklenmesi çocuk oyuncağı olur.
b) Server tarafında çözersin. Planlaması, uygulaması, optimize etmesi çok zaman alır.

Birçok programcının kendini MMO yapmaya hazır hissetmesi karşısına çıkacak problemleri normalde single-player ya da multi-player olsa da aynı makine üzerinde çalışan bir oyundaki gibi çözebileceğini düşünmesi ya da işi ticari düşünmediği için client-side çözümlerde bir sorun görmemesinden kaynaklanıyor.

Ben de ilk MMO engine'imi yazmaya başladığımda kafamda arada bir serverla haberleşen, server tarafından da diğer clientların notify edildiği basit bir model vardı. Bir süre sonra anlıyorsun ki kafandaki server/client modeli tam terse dönüyor. Client'da yapılacağını düşündüğün birçok şeyi server yapıyor. Client hemen hemen bir render engine'den ibaret kalıyor. Yani client olmasa da tüm oyun server'da oynanabilecek durumda.

Bu nedenle senin son cümlendeki "diğer büyük online oyunlara nazaran daha kolay gibi" çok büyük önem arz ediyor. Bence keyfi, amatörce başlanan bir MMO oyununun bitme ihtimali, en çok oyunun içeriği ve engine'inin esnekliğiyle ilgili. Basit bir oyun modeli ile yola çıkıldığında, yani saklambaç tarzı bir oyun yapmak istediğinizde, işin bitme olasılığı çok daha yüksek. Ancak esnek bir motoru olsun, kodda tek satır değişiklik yapılmadan yeni levellar, görevler eklenebilsin v.s. diyorsan ben de o projenin tek başına ya da son derece küçük bir ekiple hobi şeklinde uğraşarak bitmesine %1 ihtimal veriyorum.

Karakter Hareketi

« Yanıtla #8 : 29.02.2012 19:46:48 »
Hızlı düğmeleri aç

paradox

İleti: 134

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
işin gerçeği biraz merakda var şimdi..aklımıza gelen çoğu amatör oyunu yazabilecek seviyedeyizdir ama işe eğlence katamıyoruz bazen..Bu durumda işe online oyunlar giriyo..misal counter-strike 10 yıllık oyun ama halen deliler gibi oynanıyor..(Bende yazılım olarak valvenin bu oyununa saygı duyuyorum..)
Gerçek oyunculara karşı üstünlük kurup onları sopalamak daha zevklidir oyunculara göre..
Tabi ne kadar algoritmaları kolay görünsede yazmaya başlayınca bi dünya sorun çıkar bunada eminim..
şimdi dediğin gibi basit bi haritada gezinme yapmayı deniyecem..hevesim kaçmazsa devam ederim bende :D..

Bu arada senin engine ne durumdaydı en son..şimdi bırakmışsındır uğraşmayı büyük ihtimalle ..
Birde özel mesaj atmıştım görmedin sanırım..
şu partide baktığmız çalışmalarını alıcaktım işte o kargaşada unutuldu..onları müsait bi zamanında gönderiver işte işe yararları:D..arşivimde dursun..
« Son Düzenleme: 29.02.2012 19:49:19 Gönderen: paradox »

Karakter Hareketi

« Yanıtla #9 : 29.02.2012 20:02:10 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Mesajını şirketteyken almıştım ve kodların son versiyonları yoktu şirkette. Eve dönünce gönderirim demiştim unuttum. şu anda yine şirketteyim. :) Eve dönünce gönderirim (kesin unutucam :D).

Karakter Hareketi

« Yanıtla #10 : 29.02.2012 20:40:05 »
Hızlı düğmeleri aç

paradox

İleti: 134

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Tamamdır..Acelesi yok ..aklına geldiği zaman gönderirsin..

Karakter Hareketi

« Yanıtla #11 : 01.03.2012 20:39:22 »
Hızlı düğmeleri aç

endo

İleti: 687

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.moldibi.com
Bolca cevap verilmiş ama daha önce denk gelmediyseniz şu siteye de bi göz atmanızda fayda olabilir:
http://gafferongames.com/

bu abi tinyptc, openptc ve pixeltoaster'ı yapan eleman, networked phisyc ve networking for game programmers basliklarinda guzel bilgiler var.
- endo of glance -