Показать сообщение отдельно
Старый 15.10.2014, 01:03   #523
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: [TrueHorror] - разработка

Делал "в лоб".

При сохранении:
1) Сохраняем данные чилдов корня уровня. Пишем имя чилда( у всех объектов в двиге всегда уникальные имена ), пишем позицию, поворот, виден\скрыт.
2) Сохраняем позицию игрока, и все его параметры - это около 50 переменных.
3) Сохраняем предметы. Пишем имя объекта к которому привязан предмет( нода предмета загружается вместе с уровнем ). Пишем параметры предмета.

Ну и в таком духе все остальное делаем.

При загрузке:
1) Читаем имя чилда. Находим его в сцене( глобально ). Читаем все его параметры.
2) Читаем позицию игрока, читаем его параметры.
3) Читаем имя предмета. Находим указатель на предмет по имени предмета( да, вот такой оверхед, но зато просто ). Читаем параметры предмета, и суем их по указателю в сам предмет.

Теперь объясню почему именно так. Если при загрузке сейва уровень_N не создан, то создается дефолтный уровень_N - при загрузке создаются все предметы, двери, и прочее прочее, затем уже происходит загрузка самого сейва и возвращение всех параметров объектов. То есть всегда гарантируется наличие всех объектов на дефолтном уровне_N.

Быстрое сохранение\загрузка работают очень быстро - 10 мс. Кароч моментально загружается\сохраняется.

Возможно для игры другого типа этот подход не прокатит. Особенно если объекты создаются динамически. У меня так просто получилось именно из-за наличия фиксированного числа объектов на каждом уровне.

Можно глянуть сурсы на гитхабе - сначала можно посмотреть SaveWriter\SaveLoader затем у каждого сохраняемого объекта есть метод Serialize\Deserialize
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (15.10.2014)