Serialization

Сегодня, наконец-то, закончил делать сериализацию для всяких игровых объектов – в том виде, как я ее вижу. Идеи были вытащены из буста, но так, как в тех шаблонах сам черт ногу сломит, то пришлось делать “по пониманию”.

Делалось это потому что реально существует проблема того, что когда геймдизайнер просит вынести ему новые параметры для настройки в конфиг, то это вызывает некоторые проблемы. Надо добавить аж три-четыре строчки 🙂
На самом деле реально проблема в том, что неясно бывает куда в иерархии игровых объектов впихнуть новый параметр и куда в хмл.

Фактически был реализован класс Archive, который содержит в себе несколько перегруженных операторов для записи POD-типов и перегруженный шаблонный оператор для сохранения всего остального.

template
Archive& operator>>(T& t)
{
t.DeSerialize(*this);
}

Вот такая незамысловатая реализация.

Реализация сериализации не-POD типов оставлена на “пользователя” и выглядит так же как и в бусте
void Square::DeSerialize(Archive& ar)
{
ar >> m_Rectangle;
ar >> m_Color;
//…..
}

Стоит добавить, что на самом деле реализация немножко не такая, из-за того, что в хмл надо хранить пары имя-значение, поэтому еще есть структурка, которая хранит имя переменной и ее значение, т.е.
ar >> MAKE_NVP(m_Rectangle); // NVP – Name-Value-Pair

Плюсом сериализации, имхо, является то, что мы автоматом получаем вычитывание целой иерархии объектов при том, что код становится проще и лучше структурированным.
Еще большим позитивом оказалось то, что глядя в сериализованный хмл начинаешь видеть огрехи в реализации архитектуры.

Similar Posts

  • Последняя доводка перед новым техно-релизом

    До нового релиза осталось немного 🙂 Наконец закончил человеческую камеру, осталось пофиксить пару надоедливых багов и наконец залить воду – и можно будет релизить. Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Герои

    Я подсел на мыло. Смотрю сериал “Герои”, через Bittorrent. Но он реально жжот – довольно-таки интересный сюжет, который довольно интересно поворачивается всё время. Никогда я ещё так не ждал выхода следующей серии и её релиза в P2P сетях 🙂 В этом сериале, кстати, применили очень интересную штуку – Heroes 360 experience. Это некоторые связи с…

  • Размышления в конце рабочего дня

    Сижу и думаю, почему, когда хочется приехать на работу часам к 9 утра получается приехать только где-то в 11. При этом самая ужасная вещь – это то, что я до сих пор не выспался… Отвратительное состояние, с утра злился на всех без веской причины, нахамил Сержу, когда он спросил, почему до сих пор я не…

  • Фигня…

    Я выложил не ту версию гоблина… А так как я счас не дома, то новую версию смогу выложить только завтра 🙁 Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Карма

    Я начинаю задумываться, может действительно существует карма и всё такое? С понедельника всё идет как-то не так, а сегодня ещё и оказалось, что погода в карпатах совсем не такая, как нам того хотелось бы – там +5 и льёт дождь. Снег смывает, а тот что не смыло, тает и исчезнет чуть позже. В общем похоже,…

  • Игра из бек :-)

    Я снова вернулся к написанию игры – подтолкнула меня к этому необходимость делать курсовую работу, в которой надо написать генератор облаков, но как только я прикоснулся, стало ясно, что писать буду снова и много. Сегодня переделал механизм рассылки сообщений о пользовательском вводе, теперь он такой же как в С#, есть эвент (boost::signal), к которому посредством…