[SFML] 1.6 Znaczący spadek fps podczas gdy client jest połączony z serwerem.
Ostatnio zmodyfikowano 2014-01-11 18:09
DanielSC Temat założony przez niniejszego użytkownika |
[SFML] 1.6 Znaczący spadek fps podczas gdy client jest połączony z serwerem. » 2014-01-11 10:06:59 Witam! Napisałem prostą grę tzn. mapa i poruszająca się po niej postać. Do tej aplikacji stworzyłem serwer multiplayer. Serwer działa tak ,że dostaje od clienta parametry x,y,nick a następne rozsyła je do innych clientow. Wszystko działa poprawnie jeśli włączę dwa clienty na tym samym komputerze na jakim jest serwer,natomiast jeśli serwer będzie stał dajmy to na moim kompie a client połączy się z innego komputera to u tego clienta jest znaczący spadek fps (przy pomocy programu do nagrywania z 500fps do 13). Jeśli wiecie co może być nie tak ,to proszę o odpowiedz .Za każdą z góry dziękuje. Aplikacja działa z normalnym fps gdy serwer jest wyłączony. serwer: #include <SFML/Network.hpp> #include <iostream> #include <conio.h> #include <sstream> #include <String> using namespace std; using namespace sf; int main() { SelectorTCP Selector; sf::IPAddress Sender; SocketTCP Klient, sluchacz; unsigned short Port = 4567; bool polaczono = false; char buffer[ 7 ]; std::size_t Received; Packet dane; Packet dane_do_klienta; string x_gracza[ 2 ], y_gracza[ 2 ], kat_gracza[ 2 ]; string x, y, rotate, nick; string zapisz_nick[ 2 ] = { "0", "0" }; if( !sluchacz.Listen( Port ) ) { std::cout << "Blad" << std::endl; } Selector.Add( sluchacz ); while( true ) { unsigned int NbSockets = Selector.Wait(); for( unsigned int i = 0; i < NbSockets; i++ ) { Klient = Selector.GetSocketReady( i ); } if( Klient == sluchacz ) { sluchacz.Accept( Klient, & Sender ); cout << "Client connected " << endl; Selector.Add( Klient ); } else { if( Klient.Receive( dane ) == Socket::Done ) { dane >> x >> y >> rotate >> nick; for( int i = 0; i < 2; i++ ) { if( nick == zapisz_nick[ i ] ) { break; } else if( nick != zapisz_nick[ i ] && zapisz_nick[ i ] == "0" ) { zapisz_nick[ i ] = nick; x_gracza[ i ] = x; y_gracza[ i ] = y; kat_gracza[ i ] = rotate; break; } } for( int i = 0; i < 2; i++ ) { if( zapisz_nick[ i ] == nick ) { zapisz_nick[ i ] = nick; x_gracza[ i ] = x; y_gracza[ i ] = y; kat_gracza[ i ] = rotate; } if( nick != zapisz_nick[ i ] ) { dane_do_klienta << x_gracza[ i ] << y_gracza[ i ] << kat_gracza[ i ] << zapisz_nick[ i ]; if( Klient.Send( dane_do_klienta ) == Socket::Done ) { } dane_do_klienta.Clear(); } } } else { Selector.Remove( Klient ); } } } system( "PAUSE" ); return 0; }
//... client: string nick, ip; bool polaczono = false; sf::IPAddress Adres = sf::IPAddress::GetPublicAddress(); sf::SocketTCP Klient, Serwer; unsigned short Port = 4567; cout << "Podaj nick : "; cin >> nick; cout << endl; cout << "Podaj ip serwera :"; cin >> ip;
do { cout << "IP :" << Adres << endl; if( Klient.Connect( Port, ip ) == Socket::Done ) { polaczono = true; } else { } } while( polaczono == false );
dane << konwersja_double_string( x_gracza ) << konwersja_double_string( y_gracza ) << konwersja_double_string( kat ) << nick; if( Klient.Send( dane ) != Socket::NotReady ) { } dane.Clear();
if( Klient.Receive( dane_od_serwera ) != Socket::NotReady ) { dane_od_serwera >> x_gracz2 >> y_gracz2 >> kat_gracz2; } postac3.SetRotation( konwersja_char_string( kat_gracz2 ) ); postac3.SetPosition( konwersja_char_string( x_gracz2 ) + przesun_mape_x * 64, konwersja_char_double( y_gracz2 ) + przesun_mape_y * 64 );
|
|
MrPoxipol |
» 2014-01-11 10:14:10 Kod. |
|
DanielSC Temat założony przez niniejszego użytkownika |
» 2014-01-11 16:33:53 .Kod dołączony. |
|
RazzorFlame |
» 2014-01-11 16:37:52 Wyszukiwarka na forum jest, wiesz? Z podobnym problemem spotkałem się ja i dobrze pamiętam wypowiedź Ison'a (który z resztą wiele razy mi już pomógł). Jego wypowiedź brzmiała: jak pchasz te pakiety co klatkę to się nie dziw, że nie nadążasz z ich odbieraniem |
Edit: Link do tematu: http://cpp0x.pl/forum/temat/?id=11921 |
|
DanielSC Temat założony przez niniejszego użytkownika |
» 2014-01-11 18:09:02 Dzięki RazzorFlame. |
|
« 1 » |