W poprzednim semestrze z kolegą mieliśmy do napisania jakąś grę obiektowo. Teraz w wakacje postanowiliśmy dodać możliwość gry multiplayer. Pojawił nam się problem, że osoba hostująca widzi ruchy przeciwnika z opóźnieniem od sekundy do 5 sekund, a klient ruchy serwera widzi na bieżąco. To samo się dzieje lokalnie, gdy odpalone są 2 gry na jednym komputerze. Zamieszczę tutaj sposób przesyłania tych danych poprzez SFML, bo całość jest nieźle namieszana i spora.
packetSend.clear();
int dane, popDane, popPozX, popPozY, pozzX, pozzY;
dane=wskGracz1->ZwrocStany();
popPozX=0;
popPozY=0;
popDane=0;
if (popPozX!=wskGracz1->ZwrocPozycjeX() || popPozY!= wskGracz1->ZwrocPozycjeY() || popDane!=dane){
packetSend << dane <<wskGracz1->ZwrocPozycjeX() << wskGracz1->ZwrocPozycjeY();
popDane=dane;
popPozX=wskGracz1->ZwrocPozycjeX();
popPozY=wskGracz1->ZwrocPozycjeY();
socket.send(packetSend);
}
packetReceive.clear();
socket.receive(packetReceive);
if(packetReceive >> dane >> pozzX >> pozzY ){
std::cout << "Otrzymalem kod: " << dane << "\n";
wskGracz2->PobierzStany(dane);
wskGracz2->NadpiszPozycje(pozzX,pozzY);
}
Czy jest ktoś w stanie wywnioskować z tego, bądź po prostu powiedzieć jakąś oczywistą rzecz, która sprawia taki delay? Sposób przesyłu i odbioru jest taki sam dla hosta jak i clienta.
Z góry dziękuję.