Войти
Urho3DФорумЗАДАВАЙТЕ ВОПРОСЫ

Непонятки с сериализацией/десериализацией

#0
(Правка: 21:23) 21:21, 10 апр. 2020

Потихоньку разбираюсь в движке, что-то понимаю, что-то нет... Для своей игрушки написал компонент автомобиля, который, помимо прочего, загружает конфигурацию машины (положение колёс, параметры подвески, и пр.) из XML-файла, и потом настраивает встроенный RaycastVehicle соответствующим образом. Сложность возникла на этапе, когда вместо безликих

<variant type="Vector3" value="0.0 0.0 0.0" /> 
захотелось видеть в XML что-то вроде этого:
<attribute name="Position" value="0.0 0.0 0.0" />
Изначально чтение параметров тех же колёс почти полностью скопировал из RaycastVehicle, где параметры каждого колеса читались в виде VariantVector'а, но, как я уже упомянул, мне захотелось, что бы каждый параметр колеса (позиция, поворот, диаметр, и т.д.) был подписан, и потому я "раскурил" RaycastVehicle подробно. Как я понял, список строк с названиями параметров там стоит именно для того, что бы в XML-файле каждому параметру присваивалось определённое имя, вот только это у меня почему-то не заработало, и даже сам RaycastVehicle сериализировался всё тем же безликим VariantVector'ом. Покопался в функции Serializable::SaveXML() — вроде должно подписывать имена параметров, а не подписывает... Собственно, вопрос: это я чего-то не понимаю, или в движке проблема?


#1
7:20, 11 апр. 2020

Dozorniy
> Собственно, вопрос: это я чего-то не понимаю, или в движке проблема?
думаю что в движке)
давно на ухе ничего не писал. но вот как я раньше писал и читал в XMLFile, там есть поле name

AS:

+ Показать

AS:

+ Показать

#2
(Правка: 15:40) 12:52, 11 апр. 2020

Вручную-то и я могу сохранять, даже могу переопределить Serializable::LoadXML() и Serializable::SaveXML(), и читать/писать в том формате, который мне удобен, но раз уж есть стандартные средства, которые должны работать, то хотелось бы использовать их. Вот и пытаюсь понять, это где-то в движке баг, или я чего-то не догоняю... Судя по коду в Serializable::SaveXML() всё должно работать:

+ Показать

Похоже, имя XMLElement'у добавляется в куске

if (attr.enumNames_)
{
   int enumValue = value.GetInt();
   attrElem.SetAttribute("value", attr.enumNames_[enumValue]);
}
else
   attrElem.SetVariantValue(value);
где,
attr.enumNames_
— тот самый список имён элементов, входящих в список. Что ему не хватает? Имена есть, а он их всё равно не пишет...

#3
10:24, 12 апр. 2020

Так что, никто не знает, почему не пишутся имена? Версия движка - пересобранная 1.7.1. Пришлось собирать самому, т.к. нужно было добавить пару нужных мне вещей в компонент RaycastVehicle, но сериализацию я не трогал.

#4
17:57, 12 апр. 2020

>Так что, никто не знает, почему не пишутся имена?
сорян, наверно просто никто им уже не пользуется среди местных(
спроси на офф форуме https://discourse.urho3d.io

#5
20:58, 12 апр. 2020

Это как последнее средство, т.к. хотелось бы получить ответ на русском языке. Может, какие-нибудь контакты 1vanK остались, может он что скажет?

#6
18:33, 14 апр. 2020

Покопался в исходниках. Похоже, VariantVector так и сериализируется без названий аттрибутов, но зачем тогда этот список названий, если толку от него никакого? Непонятно...

Urho3DФорумЗАДАВАЙТЕ ВОПРОСЫ