Sprawdziłem, dane które wysyłam na serwerze są prawidłowe i wyglądają tak:
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Gdzie 1 = puste pole (wychodzi poza mape), 2 = trawa, 3 = woda... Taką mape ustawiam teraz na początku (już nie losuje żeby widzieć czy dane przyszły dobre).
Zaś w cliencie takie dane dostaje:
-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1,
0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0,
-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1,
0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0,
-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1,
0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0,
-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1,
0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0,
-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1,
0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0,
-1, 0, -1, 0, -1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 0, -1,
0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0,
-1, 0, -1, 0, -1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 0, -1,
Na prawde nie wiem skąd są tu te -1 jeżeli nie wysyłam z serwera żadnego 0 (bo na razie "koduje" mape tak że dodaje do niej 1 w serwerze a odejmuje 1 w cliencie (tak wiem, to sie nie ma prawa nazywać kodowaniem ;))... A oto aktualny kod wysyłania (serwer):
sf::Packet pack;
pack << std::string( "MAP" );
for( int y = pos_y - 7; y < pos_y + 7; y++ )
{
for( int x = pos_x - 10; x < pos_x + 10; x++ )
{
if( m_Map.getElement( Vector2D( x, y ), 1 ) != NULL )
{
short el = *( m_Map.getElement( Vector2D( x, y ), 1 ) ) + 1;
pack << el;
cout << el << ", ";
}
else
{
pack << 1;
cout << "1, ";
}
}
cout << endl;
}
m_Map.getElement zwraca wskaźnik na element mapy o podanym Vector2D (zwraca NULL jeśli Vector2D wychodzi poza mape).
Tak wygląda odbieranie w cliencie:
else if( packetType == "MAP" )
{
cout << "MAP" << endl;
m_Map.resizeMap( 21, 15 );
pack >> m_Map;
}
I operator do wczytywania klasy GameMap:
sf::Packet & operator >>( sf::Packet & packet, GameMap & gm )
{
for( int i = 0; i < 21 * 15; i++ )
{
short element;
if( !( packet >> element ) )
{
cout << "Failed to read \"short\" (" << sizeof( short ) << " bytes) from packet!" << endl;
}
if( i % 21 == 0 && i != 0 ) cout << endl;
cout << element - 1 << ", ";
gm.m_MapInfo_First[ i ] =( element > 0 ? element - 1: 0 );
}
return packet;
}
Dziwne też jest to że wypakowywanie "shortów" z packet'u się powodzi bo nie widze wiadomości która ma być wyświetlana kiedy nie powiedzie sie.
To jest jakieś nawiedzone chyba :). Tak więc dane przychodzą zdeformowane...
EDIT!!
Log konsoli serwera (a raczej dane o mapie) są już po dodaniu, czyli w rzeczywistości każdy element powinien być o 1 mniejszy... Zaś dane w cliencie są już po odjęciu 1.