SFML и C++ Уроки \ Разработка игр › Форумы › SFML Network › Передача обьекта класса по сети
В этой теме 3 ответа, 3 участника, последнее обновление RazorNd 8 года/лет, 2 мес. назад.
-
АвторСообщения
-
Всем доброго времени суток!
Судя по прошлым открытым темам и вопросам, заданными мной.
Я решил коснутся вопроса указанного в заголовке, а именно Передача обьекта класса по сети.
В общем если вы хотите сделать мморпг, или любую онлайн игру, вам нужно, просто не обходимо использование ООП.
Но как же передать, и получить Обьект класса по сети?
Может есть у кого ссылка на статью? Или кто знает ответ? Может в сфмл есть такая функция?
Пока я нашел метод Сериализации и Десириализации, но я в нем новичек (по сути как и в программировании в общем)
Кто поделится опытом или статьей?
mypmyp, в данном случае следует поступать точно также как и в случае, если мы хотим передавать в STL потоки свои классы, а именно нужно перегрузить операторы помещения и изъятия из потока данных (На самом деле скорее оператор побитового сдвига, но кто мы такие чтобы спорить с создателями STL? =D)
И так что нам нужно чтобы все это приготовить?
Ну что же начнем с класса который мы собираемся передавать в пакет. В качестве подопытного возьмем какой нибудь простенький класс
C++12345678910111213class SimpleClass{int _x,_y;public:SimpleClass(): _x(0), _y(0){}SimpleClass(int x, int y): _x(x), _y(y){}int x() const;void setX(int x);int y() const;void setY(int y);};Дальше самое вкусное: перегрузим для него наши операторы:
C++12345678910111213sf::Packet& operator << (sf::Packet &packet, const SimpleClass &yourClass){return packet << yourClass.x() << yourClass.y();}sf::Packet& operator >> (sf::Packet &packet, SimpleClass &yourClass){int x,y;packet >> x >> y;yourClass.setX(x);yourClass.setY(y);return packet;}Вся магия до не возможности проста: мы просто поочередно запихиваем все поля класса в пакет, поскольку перегрузка данной функции для отдельных полей класса у нас есть (в нашем случае для int). В случае если ваш класс содержит другие классы, то нужно перегрузить данные методы и для этих классов.
Распаковка пакета происходит точно также, как и упаковка за исключением смены оператора левого побитового сдвига на правый. © КэпЧто же и осталось последнее – это посмотреть как это все будет использоваться.
C++123456sf::Packet packet;SimpleClass yourClass;packet << yourClass;...packet >> yourClass;Как видно использование ни чем не отличается от стандартных типов данных.
P.s.: спасибо, что терпели очередной выпуск программной кулинарии от RazorNd
Рекомендую почитать туториал: http://www.sfml-dev.org/tutorials/2.3/
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.