.[ ČeskéHry.cz ].
[Server - Client] Chůze
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Sítě
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 31. leden 2008, 02:12:51    Předmět: [Server - Client] Chůze Odpovědět s citátem

mam takovej problem...

mam 2d tile based hru (a mam server a client) "mmo"
a mam v ni chozneni "po pixelu", a nevim presne jak bych to mel posilat serveru... nepochybne sou na to nejaky techniky, uz jen kdyz counterstrike posila informace o kazdym pohybu myši...


napadlo me to udelat nejak takhle,
kdyz se klient zacne pohybovat -> tak se serveru posle ze se zacal hybat, a ten vsem klientum okolo posle ze se zacal ten jeden hybat
kdyz se prestane pohybovat -> tak se serveru posle ze se prestal pohybovat a taky souradnice kam az dosel (neresim moc ze by lidi mohli podvadet se speedhackem atd a predbyhat se) a server posle vsem zese prestal hybat a jeho novy souradnice (ktery se u vsech klientu aktualizujou)

server aji klient bezi dost jinak takze neni moc realny abych na obojim pricital pri kazdym cyklu o kolik sem se posunul protoze by to bylo logicky uplne jinak (i kdyz by to slo nejakyma "časovýma" podminka ale nevim presne jak)

ale tohle dela to ze ten klient obcas poskoci (coz je celkem logicky ze...) a nemam tuseni co by to delalo pri vetsim poctu klientu...

tak jestli nekdo vite jak se to dela normalne klidne napiste... Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 31. leden 2008, 09:34:35    Předmět: Odpovědět s citátem

To chození máš udělaný klikáním? Že třeba někam haráč ukáže, klikne a postava tam dojde? Jestli jo, tak by bylo nejlepší poslat jen ty cílový souřadnice a ať si to každej počítač projde sám. Ale píšeš, že klienti a server běží "dost jinak" tak nevím, co tím myslíš. (I kdybys měl různý path finding na všech počítačích, můžeš poslat několik bodů mezi kterýma bude chodit po přímce. )

Že pošleš "začal se hýbat" znamená, že pošleš směr kterým jde?

Když sem dělal synchronizaci fyziky na síti do hry Aquadelic, posílal sem informace typu (zjednodušeně) "Objekt X je na pozici P, pohybuje se vektorem rychlosti V a je právě čas T". Z toho se dá předpovídat přibližně nová pozice.

Každopádně myslím, že při synchronizaci síťový hry, je nejdůležitější mít stejný herní čas na všech počítačích.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Hardwire



Založen: 04. 09. 2007
Příspěvky: 117

PříspěvekZaslal: 31. leden 2008, 09:36:21    Předmět: Odpovědět s citátem

Tenhle článek by se ti moh hodit:
http://www.gaffer.org/game-physics/networked-physics/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 31. leden 2008, 13:15:41    Předmět: Odpovědět s citátem

2]semo[: mam to udelany tak ze kliknu doleva a postava zacne jit doleva, a posilam smer (doleva, doprava, nahoru, dolu)

a tim ze bezi jinak sem myslel ze tu pozici aktualizuju v nekonecne smycce, a stejne tak server bezi v nekonnecne smycce, takze kdybych a serveru vsechny hrace posouval tak by se nepochybne posouvali uplne jinou rychlosti nez u klienta....

2Hardwire: prectu, dik
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 1. únor 2008, 09:01:20    Předmět: Odpovědět s citátem

Asi si to nechtěl slyšet, ale časovou synchronizaci na pohyb budeš potřebovat. Přece na rychlejším kompu nebudou ty postavy běhat rychlejc než na pomalejším!
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 2. únor 2008, 21:31:21    Předmět: Odpovědět s citátem

no ale treba ultima online nic takovyho nedela (jako z pohledu server-client) nevim jak si to klient resi sam... (sice se v ultime chodi po ctvereccich ale prejiti jednoho trva cca 1/10sec...)

no a me je celkem jedno ze nebudou synchronizovani o chozeni v te hre nejde...


ale asi to stejne cely predelam mel sem to v XNA a tak trochu je slozity to rozjet na jinych pc, nehlede na to ze to neni moc delany na pouzivani mysi nebo klavesnice...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 3. únor 2008, 12:00:02    Předmět: Odpovědět s citátem

No jak říkám, postaral bych se o to, aby na všech kompech trvalo přejití stejné vzdálenosti stejný čas a pak bych posílal jen souřadnice, kam se má dojít. Myslím, že se to tak dělá.
Nebo případně pokud by hráč měl různý nastavení rychlosti chůze, tak posílat ještě kromě cílového bodu i rychlost.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 3. únor 2008, 19:38:21    Předmět: Odpovědět s citátem

jak sem psal tahle hra nefunuje tak ze kliknes a postava jde na nejaky misto, ale ze drzis sipku a postava se pohybuje...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 3. únor 2008, 19:54:19    Předmět: Odpovědět s citátem

Jo ták...to mi uniklo.

Už chápu tvé předchozí příspěvky, tím "běží dost jinak" si myslel právě ten čas, že? Ne že by postava chodila jinou rychlostí :)

Bylo by nejlepší na začátku hry (připojení hráče do hry) seštelovat čas se serverem (neříkám, že se to dělá snadno..) co možná nejpřesněji. Pak stačí poslat k tý události začátku chůze i čas, kdy se tak stalo. Podle toho snadno vypočteš kolik už postava ušla a můžeš její pohyb mírně zrychlit (aby to neposkočilo). Když bude pohyb dostatečně dlouhý, nikdo si ničeho nevšimne a postava dojde na správné místo.

Pokud nepoužiješ pro to seštelování herního času nějakou velmi sofistikovanou metodu, pravděpodobně se ti nepodaří dosáhnout přesný synchronizace. Proto bych ještě zaved nějakej drobnej fejk; když po skončení chůze pošelš ty přesný souřadnice a postava bude jinde (a mělo by tak dojít k poskočení), prostě by se mohla otočit a dojít na správné místo. Případně její pozici interpolovat se správnou.

EDIT: A na závěr mě napadá možná nejjednodušší řešení: Ten klient je vždy při chůzi trochu napřed, vadilo by moc, kdyby se na ostatních počítačích zpoždění neřešilo? Pak bys poslal "začátek pohybu", ovšem je jasný, že na klientovi, který to poslal, dojde do cíle dřív, než na ostatních klientech. Takže bys po skončení chůze poslal cílový souřadnice (nebo spíš vzdálenost od začátku chůze, směr už znáš) a teprve až by hráči na ostatních klientech došli do cílového bodu, tak by se zastavili.
Je to vlastně přesně to, co si psal v prvním příspěvku, ale neukončíš pohyb hned jak přijde zpráva o ukončení pohybu, nýbrž až dojde na cílové místo.

Mohlo by se stát, že ho přejde (ale snad ne tak často, pokud nebude velkej rozptyl sítě), pak bych použil výše uvedený fejk.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 4. únor 2008, 08:59:40    Předmět: Odpovědět s citátem

Synchronizace herního času je jasný základ, ale to fejkování bych asi moc neřešil. Pokud si vybavuju správně Quake II, při lagnutí na síti člověk viděl jinou postavu pokačovat předchozím směrem (delta a rychlost) a když se následně zjistilo, že je jinde, prostě se tam instantně přesunul. Šlo taky o to, že na LAN tohle bylo spíše výjimečné, takže to hře moc nevadilo
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Weny Sky



Založen: 28. 07. 2007
Příspěvky: 241

PříspěvekZaslal: 4. únor 2008, 17:35:25    Předmět: Odpovědět s citátem

Ja bych doporucil prostudovat napriklad MaNGOS project popripade Antrix project, odpoved jak korektne resit tu chuzi tam urcite najdes.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 7. duben 2009, 23:47:10    Předmět: Odpovědět s citátem

Tak sem se do něceho podobnýho pustil znova a měl bych pár dotazů

myslíte si že je možný udělat něco jako 2d střílečku přez TCP? (nemůžu používat UDP, a nevím jak moc je ta rychlost znatelná)


mám ale hlavně trochu problém se synchronizací na klientech, protože když je latency třeba 150ms a někdo začne rotovat, tak než dojde zpráva že už rotovat přestal tak je otočenej o hrozně moc stupňů dál (což má taky dost negativní vliv na to že přitom šel rovně, protože pak je úplně jinde než měl být)

jediný řešení co mě napadlo, je uměle zpozdit akce klienta, tzn že sice obdržím že začal rotovat, ale nebudu nic 150ms (tenhle čas by záležel na latency zjištené serverem) dělat

no a otázka, neexistuje pro tohle nějakej ověřenej postup? ten článek co tady byl mě připádá že má akorát řešit když packety nepřicházeji ve správným pořadí, nebo když neposílam pozice, ale jen změny stavu

(podle vzoru wow emulatorů posílam při každé změně pohybu, současnou pozici a rotaci)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1824

PříspěvekZaslal: 8. duben 2009, 00:50:51    Předmět: Odpovědět s citátem

Lagu sa proste nezbavis. A to hlavne lagu sposobeneho vstupom od uzivatelov.
Ostatnych delayov sa mozes ciastocne zbavit a to rozumnou predikciou.

A myslim si, ze ti bude stacit jednoducha linearna predikcia ci kvadraticka predikcia (curve fitting) a k tomu posielat data ako to napisal semo ci mem (pre 3D napriklad celu maticu a rychlosti (linearne a uhlove), pripadne ekvivalenty a CASOVU ZNAMKU). Verim tomu, ze hry to v zaklade robia vzdy ako napisal mem (poznamka o Q2) + nejaka lepsia predikcia a tak.

Samozrejme mozes posielat aj akcie klientov namiesto priestoro-casovych udajov, lenze to nemusi byt uplne vhodne, pripadne kombinaciu (a hlavne vlastnorucnemu CASOVEMU znackovaniu paketov, ci inej temporalnej synchronizacii sa proste nevyhnes).

Ja si myslim, ale musim sa priznat, ze som to nemeral, ze TCP bude ukrutne pomalsie nez UDP a urcite by som ho nepouzival - TCP akurat pre fakt dolezite, malo frekventovane spravy.

Co sa tyka pohybu po pixeloch, ja by som to okamzite prepisal na floating point Smile Ak ti to dovoluje cielova platforma, co bude predpokladam PC alebo nieco s koprocesorom, ze...
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 8. duben 2009, 10:11:26    Předmět: Odpovědět s citátem

on jako není problém když se někdo hýbe tak že jde rovně nekolik sec pak se otočí a zas jde rovně, ale když začne strašne rychle mačkat tlačítka tak to po chvíli začne dělat uplně divný věci (teda nevím jestli to neni tím že mám někde chybu Smile)

možná sem zapoměl napsat že to funguje tak že se prvně musíš tím směrem otočit a pak až jím můžeš jít, takže posílam jen rovne, dozadu, otacetdoleva, otacetdoprava


jasne čas už si navzájem posílám (i když teda moc nevím kterej čas má mít hlavní slovo (jestli ten od klienta kterej se pohnul, nebo ten serveru) (zatím beru klienta)


UDP použít nemůžu protože používám Silverlight

s tima pixelema sem to moc nepochopil, jakože nemyslel sem že mam pozici uloženou jako int, mam ju jakou double (nechtělo se mi psat vlastni Point s floatem tak sem použil windowsovskej)
tim sem jen chtěl říct že se ne pohybuju po čtverečcích
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 8. duben 2009, 11:49:03    Předmět: Odpovědět s citátem

Sosarian napsal:
jasne čas už si navzájem posílám (i když teda moc nevím kterej čas má mít hlavní slovo (jestli ten od klienta kterej se pohnul, nebo ten serveru) (zatím beru klienta)

Ty jsi to možná ještě nepochopil, ty musíš udělat na začátku synchronizaci a pak už s tím pracuješ.

- Pustíš server a začne běžet interní čas (0, 1, ...)
- Klient se připojí a vyžádá si aktuální čas a odpoví na něj, server si změří jak dlouho trvalo než přišla odpověď, vydělí to 2 a tím získá rozdíl, o který je klient vzdálen (opožděn). Tohle je nejjednodušší metoda synchronizace (plus bys měl provést několik pokusů), ale teoreticky když tohle provedeš a pošleš klientovi informaci o rozdílu, bude si schopen lokálně nastavit stejný čas jako na serveru (takže když server bude mít 7, klient bude mít taky 7)
- Když pak přijde nějaká informace o pohybu hráče, tak tam bude: čas 7, poloha xy, vektory pohybu dxdy
- Klient se u sebe mrkne a zjistí, že už je čas 9 (protože ten paket nějakou dobu putoval), takže k té poloze z času 7 co mu přišla rovnou dopočítá ten pohyb dxdy, aby mohl hráči zobrazit "reálnou" polohu v danou chvíli
- atd. Pro krátké časy by to nemělo dělat problém, pokud to "lagne" nebo hráč prudce změní směr, může být vidět cuknutí, ale to měl Q2 taky a nikoho to ne*alo Wink
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Sítě Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna