Mängumeistrid
[?] Multiplayer - suhtlus serveriga - Printerisõbralik versioon

+- Mängumeistrid (http://www.suvaline.org/MM)
+-- Foorum: Mängumeistrid (/forumdisplay.php?fid=3)
+--- Foorum: Abi, õpetused ja näited (/forumdisplay.php?fid=5)
+--- Teema: [?] Multiplayer - suhtlus serveriga (/showthread.php?tid=641)



[?] Multiplayer - suhtlus serveriga - kapsas - 29.04.2016 19:14

Tere kõikidele foorumlastele!
Kuna ma muud alamfoorumit ei leidnud, siis loodan, et vastav teema sai õige alafoorumi alla. Loodetavasti edaspidi võetakse ka mind sõbralikult vastu Smile

Olen otsinud, uurinud, puurinud mitmikmängija (multiplayer) kliendi ja serveri vahelist suhtlust. Nimelt on mulle mõned asjad arusaamatud.

Mäng ise on täielikult reaalaja baasil (ei ole turn-based) kus mängijad aina liiguvad ringi mängumaailmas (kui nad ise tahavad).

Kuidas terve suhtlus loogiliselt serveriga peaks käima? Ilmselgelt kõik animatsioonid teostaksin kliendi poolel..

Minu arusaam:
Serveris käib eraldi füüsikaloop, mis kontrollib kõik eraldi üle (collision jm), kliendi pool samuti (see on juba enesest mõistetav)

- Mängija input saadetakse serverisse
- Serveris talletatakse vastav input (kasvõi klahvivalik) seni, kuni serveri poolne loop taaskord käivitub.
- Järgmise loopiga liigutatakse veidi playerit - ehk siis uuendatakse serveri pool "mängijad" massiivi. Ning siis juba saadetakse kõikidele uued positsioonid ja kõik muutused laiali.
- Klient saab sõnumi, uuendatakse vaates mängijate asukohti jms.


Mis oleks kõige parem viis mängijate sünkroonis hoidmiseks?
Ma ei oska öelda, kas ma mõtlen üle, aga igasugune vastukaja on teretulnud.


RE: [?] Multiplayer - suhtlus serveriga - Mihkel - 30.04.2016 11:28

Tere. Mis platvormi peale sa seda ehitad? Kas see meenutab pigem first person shooterit või rts-i? Soovitaks googlesse kirjutada "platvormi nimi + multiplayer first person shooter example".

Väga kursis ei ole sellega aga on vist kaks lähenemist. Kui see on pigem first person shooter siis kliendid animeerivad koguaeg edasi mängu, teadmata mis tegelikult serveris toimub ja hiljem saavad korrektuure selle kohta, mida nt vastased tegid. Sellest tulenevalt võib mängija joosta mingis suunas ja järgmisel hetkel avastada, et vastane on sinna seina ette pannud ja tagasi glitchida. Nt minecraftis.

Kui see on pigem rts (starcraft) siis tagasi glitchimist ei ole vaid on "delay". Nt kui saadad oma uniti vastast ründama, siis võib minna suure laggi korral pool sekundit enne kui ta reaalselt ekraani peal kõndima hakkab. Põhimõtteliselt mängija input käib serveris ja (vist?) tuleb tagasi enne kui unit kõndima hakkab. Kui lagg väga suureks läheb siis jääb mäng kõigi jaoks seisma korraks. First person shooteris ei saa klahvivajutusele järgneda poolt sekundit laggi, sest mängija kukub katuselt alla kui ta veel pool sekundit edasi jookseks.

Kas sa tahad selle ise detailideni välja ehitada või lihtsalt first person shooterit teha? Kui ehitada ei taha siis ma soovitaks võtta nt Unity. Seal on põhi asjad sisse ehitatud, paned a la start_multiplayer_game() ja ütled süngitavatele objektidele, et synchronize = true; Smile


RE: [?] Multiplayer - suhtlus serveriga - kapsas - 30.04.2016 13:06

Tere, Mihkel

Aitähh Sinu vastukaja eest. Mäng on täiesti 2d, brauseri kaudu mängitav ning ehitan seda ise üles (single-playeri puhul pole probleemne enam midagi). Serveri poolne saab teostatud javaskriptiga (sama ka kliendi poolne, kuna kõik peab kuvama canvasel). Ilmselgelt saab isegi teatud osa klassidest jagada nii kliendi- kui ka serveri pool.

Senini olen välja mõelnud nii palju, et..
Serveris peaks olema kaks loopi - üks füüsika jaoks (50 korda sekundis), teine, mis käivitub umbes 22 korda sekundis (saadab kõikidele mängija koordinaadid ja muud info laiali - ainult need, mis vahepeal muutunud on).
Muuseas.. mängija võtab kasutaja inpute vastu väljaspool loopi ning lisab need "märkmena" - protsessib loopi sees.

kliendi input -> Saadetakse serverisse ja pannakse kliendil kohe vaates objekt liikuma -> server saadab tagasi uued koordinaadid (sekundis 22 korda) -> parandatakse mängija positsiooni (kui vaja, nii nagu kirjutasid, et on FPS mängu puhul).


RE: [?] Multiplayer - suhtlus serveriga - Cino - 30.04.2016 20:35

Kindlasti pead sel juhul arvestama ka paketikadude, netikatkestustega ja võltsitud kliendi inputiga.

Muidu mitte et ma hirmutada tahaks, aga vahest ei saa lõplikult neid probleeme ka suurfirmad lahendatud (kasvõi DayZ näitel).


RE: [?] Multiplayer - suhtlus serveriga - kapsas - 01.05.2016 22:31

Cino, pole hullu, kui ka ära hirmutad. Just nii, sellega üritan arvestada ning proovin vähemalt midagigi selle vastu (Loomulikult ei anna ma sõna, aga.. üritamine on juba pool võitu Big Grin).

Alustan uuest nädalast hoogsamalt tegelemist (loopide järjekorrad ja muu on paigas). Soovitusi sain ning ka asju, millele tähelepanu pöörata.
Terve teema on veidi selgem.