Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
andy
Založen: 20. 09. 2007 Příspěvky: 54
|
Zaslal: 26. květen 2008, 21:52:24 Předmět: Oneskorenie pri pohybe |
|
|
Mam takyto problem, robim na jednej 3D hre, ktora by mala byt multiplayerovka. Mam vytvorenu aplikaciu (hru), ktora sa moze spravat ako server, alebo ako klient, podla toho co zvolim.
Takze ked si vytvorim server, spustim aplikaciu druhy krat a spusitm ju ako klienta. Po pripojeni klienta na server sa na servery vytvori objekt (gula-hrac-klient). Pri pohybe hraca klienskej app sa hned odosielaju serveru aj udaje o pozicii. Po prijati udajov severom, by sa hned mal nastavit aj objekt na tuto poziciu, lenze nastava tam dost znacne oneskorenie 2-5 s.
Udaj o pozicii odosielam ako retazec napr. "Pozicia/12.5/25.4"
prve cislo je x a druhe z osa. Na serv. sa retazec podeli (strtok) na x a z -ovy udaj a ulozi do glob. premennej. Potom sa nastavuje pozicia vytvoreneho objektu na prijate hodnoty.
Tak neviem preco je tam take velke oneskorenie. Nevie mi niekto poradit? Moze to byt tym ze to posielam ako retazec, ktory treba este podelit? dik |
|
Návrat nahoru |
|
|
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 26. květen 2008, 21:57:44 Předmět: |
|
|
na toto tema se tu uz diskutovalo sahodlouhe - problem synchronizace klient<->server je rozsahly
pohledej prvne co jsme tu uz psali |
|
Návrat nahoru |
|
|
Quiark
Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 26. květen 2008, 22:13:18 Předmět: |
|
|
Pokud to máš na stejném počítači, tak by to mělo přijít hned. Pokud ti ta hra vytěžuje procesor na 100 %, tak to třeba nestíhá. Zkusil bych tedy fixně snížit framerate. A taky vypnout firewall, antivir a další srandy. _________________ Mám strach |
|
Návrat nahoru |
|
|
andy
Založen: 20. 09. 2007 Příspěvky: 54
|
Zaslal: 26. květen 2008, 22:34:23 Předmět: |
|
|
Nie procesor nieje na 100% a testujem to na jednom pocitaci, testoval som to aj na sieti.
Predtym som mal aplikacie 800x600. Zmenil som rozlisenie na 640x480 a odozva bola okamzita. len sa mi zada ze postupom casu sa ta odozva zvacsuje... nechapem
Kolko je asi normalne oneskorenie?
Naposledy upravil andy dne 26. květen 2008, 23:44:16, celkově upraveno 1 krát |
|
Návrat nahoru |
|
|
Weny Sky
Založen: 28. 07. 2007 Příspěvky: 241
|
Zaslal: 26. květen 2008, 23:01:57 Předmět: |
|
|
A mas ty casti zajistujici sitovou komunikaci ve vlastnich threadech a jeste nejlepe s neblokovanym ctenim ze socketu? |
|
Návrat nahoru |
|
|
andy
Založen: 20. 09. 2007 Příspěvky: 54
|
Zaslal: 26. květen 2008, 23:45:40 Předmět: |
|
|
fuch, no velmi som tomu nepochopil, nerozumiem sa az tak do sietovych zalezitosti.
Ako to myslis, alebo co by trebalo urobit.. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 27. květen 2008, 08:38:39 Předmět: |
|
|
Normální odezva je pár milisekund na lokální síti. Jaký používáš protokol?
ještě mě napadá, jestli tam nemáš nějaký buffer, který se nejprve naplní přijatýma zprávama (což trvá) a pak ho teprve vybereš _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 27. květen 2008, 08:51:48 Předmět: |
|
|
sietovu cast sprav tak aby vzdy vybrala vsetky pakety az kym nie je prazdny buffer a zobrat do uvahy len poslednu prichodziu polohu. ak to robis cez UDP ktore nezarucuje dorucenie spravy a aj poradie mal by si tam mat aj nejake cislovanie ze ked pride nejaka sprava oneskorene aby to neskocilo dozadu.
ja teraz s kamosom robime taky VoIP program a tam som musel obmedzit vstupny buffer a zaviest cislovanie paketov a aj obmedzit buffer na 15 paketov po 20ms zvuku aby neboly velke odozvy. _________________ Najjednoduchšie chyby sa najtažšie hľadajú.
Naposledy upravil nou dne 27. květen 2008, 08:56:59, celkově upraveno 1 krát |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 27. květen 2008, 08:54:25 Předmět: |
|
|
na lokální síti běží i UDP prakticky bezchybně _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Weny Sky
Založen: 28. 07. 2007 Příspěvky: 241
|
Zaslal: 27. květen 2008, 09:46:24 Předmět: |
|
|
andy napsal: |
Ako to myslis, alebo co by trebalo urobit.. |
No predpokladam, ze co je thread vis.
Takze u takove jednoduche hry bych to videl takto :
Budes mit dva sve buffery(nejlepe fronty). Jeden vystupni a druhy vstupni. Nad temito buffery budes mit napsane funkce get a insert, ktere budou slouzit k vybirani/vkladani dat do techto bufferu a budou mezi thready synchronizovane.
Pak sitovy thread bude cist data ze socketu, zpracovavat do podoby, jakou potrebujes a vlozi je do vystupniho bufferu ze ktereho si bude moct uz data precist thread samotne hry.
Pri odesilani dat to zase bude tak, ze thread hry vlozi do tohoto bufferu urcita data, a sitovy thread si je z nej nacte a posle po siti.
Kazdopadne toto je ciste prace se sockety. Jestli pouzivas nejakou 3rd knihovnu, tak tam uz takove detaily byvaji casto uz vytvorene.
Jinak zkus si vytvorit nejaky textovy protokol, spustit si vlastni server a pripojit se na nej nejakym klientem, ktery zvlada plain text komunikaci a uvidis, jak ti to pracuje.
PS: a u UDP se muzou pomichat packety jen na siti, kde je vice nez jeden smerovac. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 27. květen 2008, 12:04:39 Předmět: |
|
|
Ty vlákna nejsou nutný, může to bejt klidně v hlavní smyčce programu. Herní engine kreslí co nejrychlejc a vytěžuje procesor, další vlákna můžou přinýst díky tomu spíš problémy. Aquadelict GT sme pustili do světa se zabugovaným multiplayerem. Často nefungoval na vícejádrových procesorech. Byl napsaný v Indy, což je promakaná knihovna (...používala vlákna). Pak sme to přepsali přímo pro WinSock a vydali patch. Vlákna šly do háje. Od těch dob to funguje skvěle :). Co si neuděláš, to nemáš :) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
andy
Založen: 20. 09. 2007 Příspěvky: 54
|
Zaslal: 27. květen 2008, 12:28:28 Předmět: |
|
|
Ja ku komunikacii pouzivam kniznicu Multisync, kde su uz funkcie na zaslanie spravy a prijatie spravy.. Takze neviem ci sa pouziva k tomu aj buffer
Myslim ze sa pouziva TCP/IP protokol ale niesom si isty. hovorym ze sa velmi dobre nerozumiem do sietovych zalezitosti a komunikacie.
Pre informaciu, hra je robena pod DX9.
Skusal som si vytvorit aplikacie cient a aplikaciu server, kde zaslanie spravy klienta sa automaticky zobrazilo ako log na servery, cize oneskorenie tam nebolo prakticky ziadne. tu je to debug . sprava sa zasiela stlacenim klavesu D.
Len nechapem preco zo zacitku je odozva okamzita, ale postupom casu sa zacina zvacsovat...
Naposledy upravil andy dne 27. květen 2008, 13:02:04, celkově upraveno 1 krát |
|
Návrat nahoru |
|
|
Quiark
Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 27. květen 2008, 12:58:00 Předmět: |
|
|
Jestli to nebude tou knihovnou... zkus ten problém izolovat, třeba napsat samostatný konzolový program, který v okamžiku přijetí zprávy vypíše něco do konzole. Pak budeš mít jen malý kousek kódu a pokud to nebude fungovat, bude chyba v něm. _________________ Mám strach |
|
Návrat nahoru |
|
|
if.then
Založen: 13. 04. 2008 Příspěvky: 579
|
Zaslal: 28. květen 2008, 06:17:02 Předmět: Velké sousto |
|
|
no já si myslím, že si vzal moc velké sousto... Já se o MMORPG taky pokoušel (2D) ale ta práce se sítěmi je něco jiného než render a herní logika... Nakonec jsem tonezprovoznil plánuji se k tomu vrátit od základů (žádné knihovny, čistá komunikace), ovšemže to bude běh na dlouhou trať.... |
|
Návrat nahoru |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 28. květen 2008, 08:29:38 Předmět: |
|
|
if.then: Moc to prožíváš, já napsal multiplayer hru pro 6 hráčů po LAN v TurboBASICu pod DOSem (přes IPX a broadcast) a stačilo se nad tím jen trochu zamyslet. Dokonce jsem tam měl automatické přepínání role serveru, když hráč který hru zakládal nereaguje v nastaveném timeout. Je pravda, že jsem nepotřeboval řešit synchronizacu času, pořadí paketů ani zasílání pouze prioritní podmnožiny stavů hry, protože každý objekt (hráč) se vešel tak do 30 B, pakety byly pěkně malé, doručení zajištěné (teď nevím jestli IPX nebo SPX abych nekecal) a po LAN to samozřejmě běhalo rychle _________________
|
|
Návrat nahoru |
|
|
|