В настоящее время я разрабатываю 2D-редактор карт. Каждая плитка имеет некоторые свойства, такие как положение, столкновение и некоторые другие. Конечно, мне нужно также сохранить количество столбцов и строк карты.Что такое хороший способ сохранить 2D-карту
Было бы хорошо, если бы я мог сохранить карту и загрузить ее позже. Я думал о сохранении карты как отдельного файла .png и ограничений в другом файле (координаты плиток, ширина плитки и т. Д.). Для этого я попытался использовать дерево свойств boost, чтобы сохранить карту в xml-файле. Но это очень медленно, и xml получает несколько тысяч строк текста. Кто-нибудь знает, как я могу подойти к этому? Я никогда не делал никаких серьезных сбережений/загрузки файлов.
Вот некоторые тестового кода я использовал для сохранить map.xml:
Примечание: Приведенный tilemap представляет собой 2 мерный вектор
станд :: вектор < станд :: вектор < плитки *>> m_map;
void TileMap::exportAsXML(std::string &filename)
{
boost::property_tree::ptree pt;
pt.put("map.filename", filename);
filename=filename+".xml";
pt.put("map.size.cols", m_cols);
pt.put("map.size.rows", m_rows);
pt.put("map.size.tile_width", m_tile_width);
pt.put("map.size.tile_height", m_tile_height);
int i=0;
BOOST_FOREACH(std::vector<Tile*> row, m_map)
{
BOOST_FOREACH(Tile* t, row)
{
pt.put("Tiles."+boost::lexical_cast<std::string>(i)+".posX", t->getProperty()->getPosX());
pt.put("Tiles."+boost::lexical_cast<std::string>(i)+".posY", t->getProperty()->getPosY());
pt.put("Tiles."+boost::lexical_cast<std::string>(i)+".blocks", t->getProperty()->getBlocks());
pt.put("Tiles."+boost::lexical_cast<std::string>(i)+".width", t->getProperty()->getWidth());
pt.put("Tiles."+boost::lexical_cast<std::string>(i)+".height", t->getProperty()->getHeight());
i++;
}
}
boost::property_tree::xml_writer_settings<char> settings('\t', 1);
write_xml(filename, pt, std::locale(), settings);
}
вы можете попробовать формат josn, он более компактный, чем xml, если не идти, двоичный – Raxvan