.[ ČeskéHry.cz ].
Multiplayer, vyrovnávání lagů

 
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
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 12. duben 2011, 18:39:29    Předmět: Multiplayer, vyrovnávání lagů Odpovědět s citátem

Zdar,

problém je následující, když jsou pingy na server větší než nejakejch 40ms, tak mi začne hráč(kužel ve videu) lagovat, zkoušel jsem interpolovat tak jako při klasickejch animacích - to nemělo výsledek, momentálně mi if.then poradil extrapolaci - snažím se dopočítat pozice ale jak je vidět ve videu http://www.youtube.com/watch?v=n1NtSPkVo8g tak prostě to nefunguje ani kdybych se pokakal.


Tímdle dopočítávám pozice, myslím že je to správně ale prostě to nefunguje xD
kód:

                vec2 angle = netw.playerPositions[i].angle; //- uhel kam se diva hrac
                vec3 pos = netw.playerPositions[i].pos; // - jeho AKTUALNI pozice co mi dosla v paketu
                //i - index hrace kteryho kreslim, to je snad pochopitelny

                vec3 inPos = pos;
                if(netw.playerPositions[i].isMoving)
                {
                    float speed = netw.playerPositions[i].isWalking ? walkSpeed * timer.GetDT() : sprintSpeed * timer.GetDT();
                    inPos.x += (float) (sin(-netw.playerPositions[i].angle.y * DEG) *speed);
                   inPos.z += (float) (cos( netw.playerPositions[i].angle.y * DEG) *speed);
                }


Jakýkoliv nápady sem, můj první multiplayer, pokud je už odpověď tady, tak mě nelynčujte, neviděl sem ji ;D
EDIT- zkurvenej BBCODE Wink
Dikec Jatro


Naposledy upravil Játro.m dne 12. duben 2011, 19:14:13, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 12. duben 2011, 18:50:06    Předmět: Odpovědět s citátem

myslim ze problem je v tom ze okamzite po prijati paketu posunies protihraca tam kde ti prislo ze je. tam by som pridal taktiez interpolaciu kde by som ho nechal aby na tu poziciu sa dosunul v pribehu nejakej pol sekundy.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Deluxe



Založen: 31. 07. 2007
Příspěvky: 235
Bydliště: Oslavany

PříspěvekZaslal: 12. duben 2011, 19:14:18    Předmět: Odpovědět s citátem

O lag kompenzaci (a interpolaci entit) je myslím zajímavej tenhle článek.
Je to popis, jak tohle řeší Valve v Source enginu, ale myslím, že něco z toho by se dalo použít.

Hlavní myšlenkou je asi to, že klient je vždy min. o jeden paket pozadu oproti serveru,
takže může interpolovat mezi posledním a předposledním paketem.

Už sem to tu někde zmiňoval, tak doufám že to nebylo zrovna tobě.
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: 13. duben 2011, 07:45:56    Předmět: Odpovědět s citátem

Když pošleš pozici, kde hráč je, jeho rychlost a hlavně čas odeslání, tak novou pozici můžeš spočítat: pozice + rychlost * čas od odeslání. Zdálo by se jednoduché, ale je potřeba před začátkem komunikace sesynchronizovat čas (aby všichni účastníci měli stejně). To se mi bohužel nikdy nepovedlo, tak sme na LAN používali fixní hodnotu. Ale fungovalo. Nicméně jsou na to algoritmy a nědke tady na fóru se to kdysi probíralo.
_________________
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
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 13. duben 2011, 07:56:34    Předmět: Odpovědět s citátem

Diky za odpovedi, mrknu se na to, btw ]semo[, ta synchronizace nepujde protoze to bude ciste over net, takze se s tema lagama musim vyporadavat porad, myslim Very Happy Nejak to poresim.
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: 13. duben 2011, 08:07:42    Předmět: Odpovědět s citátem

Ne, to by nevadilo, že to je přes net. Když jsem tenhle způsob testoval s umělýma lagama nepravidelný velikosti (tuším do 300 ms!), navíc v 3D fyzikálním prostředí, tak to běželo krásně plynule. Ano, mluvím opět o Aquadelicu, jak bývá mým zvykem.

Jediný probém skutečně je, seřídit ten čas s přesností na milisekundy. Ale pokud to pojede přes net, možná bys mohl využít nějakou internetovou službu (to já na LAN nemohl).
_________________
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: 13. duben 2011, 10:58:02    Předmět: Odpovědět s citátem

Játro.m napsal:
ta synchronizace nepujde protoze to bude ciste over net, takze se s tema lagama musim vyporadavat porad, myslim Very Happy

Jo, ale tam jde čistě o to, abyste měli na začátku stejný čas (primitivně se dá nastavit opakovaným půlením intervalu), a když ti pak přijde paket, ve kterém bude napsané od klienta T1050, a ty budeš mít u sebe čas T1200, tak víš, jak se zachovat.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



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

PříspěvekZaslal: 13. duben 2011, 12:22:27    Předmět: Odpovědět s citátem

Presne tak. Urcite odporucam spravit na zaciatku synchronizaciu casu, je na to primitivny algoritmus, ktory vymyslite aj so sedliackym rozumom a dokonca aj bez nutnosti existencie vypoctovej techniky Very Happy a bude to fungovat i pri sekundovom lagu. Tym samozrejme nemyslim zmenit systemovy cas, ale si len ulozit offset proti serverovemu casu Smile
Btw, skuste si pustit 2 kompy na zaciatku zosynchronizovane na niekolko hodin a budete sa divit, ake su tam rozdiely v rychlosti toho timeru (ano, aj high precision counteru).
_________________
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
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
Strana 1 z 1

 
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