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)…

  • IGDA в Киеве

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

  • Настройка Node-RED + Raspberry PI 3 + ZWave Razberry (Raspbian 9 Stretch)

    Для того, чтобы заработала связка Node-RED с Z-Wave (open-zwave) на RPI3, нужно выполнить следующий набор манипуляций: Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Цивилизация, как мировое зло

    Пришел с работы в прекрасном расположении духа, посидел, поговорил с родителями, а после этого сделал огромную ошибку – сел поиграть часок в цивилизацию. Еле закончил в половине четвертого, при помощи невероятного усилия силы воли. Лег спать, а с утра (в 11 часов), как только проснулся, сразу сел опять играть, такое ощущение, будто я какой-то наркоман,…

  • Про еДеньги

    Так сложилось, что последние полгода я живу с долларовой виза-картой. И обнаружил множество неудобств, связанных с конверсией валюты, называется грабительский курс. При этом я думал, мож просто Украина – страна та ещё, поэтому тут всё плохо. Но, потратив кучу денег за кордоном в разных валютах, я сел за выписку с калькулятором и обнаружил, что там…

  • Hammerwars

    Ура, наш мегапатч для европейской версии hammerwars прошёл QA и скоро выйдет на полки Playstation Store. На самом деле это даже не патч, это наполовину переписанный продукт, т.к. в то, что вышло весной играть можно было с большим трудом. Но теперь вроде даже получилась игра! Из-за проблем с коллизиями пришлось переписывать физику, взяли модуль коллизий…