Сохранение в игре.
Модераторы: Sanja, Максим Кич
Re: Сохранение в игре.
Ну я пока думаю попробовать делать сохранения более радикальным способом - либо при загрузке удалять таблицы сразу после считывания, либо при сохранении очищать таблицы перед записью. Так что информация будет содержаться либо в памяти в игре, либо в базе данных. А то действительно возможны различные баги с сохранениями - типа сохранился на первом уровне, а при загрузке тебе подмешали десяток высокоуровневых монстров из прошлого сохранения.
- Максим Кич
- Администратор
- Сообщения: 1642
- Зарегистрирован: 03 дек 2006, 20:17
- Откуда: Витебск, Беларусь
- Контактная информация:
Re: Сохранение в игре.
Вот для этого достаточно хранить campaign_id или ещё какой идентификатор каждого прохождения. И потом по нему же вычищать, буде появится необходимость. Тем более, SQLite поддерживает каскадное удаление по внешнему ключу.altmax писал(а): ↑13 фев 2017, 15:24Ну я пока думаю попробовать делать сохранения более радикальным способом - либо при загрузке удалять таблицы сразу после считывания, либо при сохранении очищать таблицы перед записью. Так что информация будет содержаться либо в памяти в игре, либо в базе данных. А то действительно возможны различные баги с сохранениями - типа сохранился на первом уровне, а при загрузке тебе подмешали десяток высокоуровневых монстров из прошлого сохранения.
Либо, учитывая специфику SQLite, заводить по файлу на прохождение.
Dump the screen? [y/n]
Re: Сохранение в игре.
Решил делать сохранение путем простой записи в файл в бинарном режиме. Функциональность базы данных для этой цели явно излишня. В общем то ничего сложного аккуратно записать в файл данные, а потом их оттуда в определённом порядке и извлечь.
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Сохранение в игре.
Простота работы с бинарным представлением довольно обманчива. Пока работает все хорошо, но стоит чему-нибудь сломаться и наступает отладка, ад и Пакистан. Запись в текстовом виде (или через SQL) требует хоть какого-то промежуточного слоя (разбор-конвертация), который облегчает обнаружение и репорт ошибок. Конкретно текстовый формат имеет плюс беглого визуального контроля происходящего.
Пытается раскуклиться
Re: Сохранение в игре.
Переделать никогда не поздно, и писать буду не в один, а в несколько файлов - каждый класс отдельно, что облегчит отладку. А так да - ошибку будет найти не просто, вроде записал, считал - а в результате какой-то хлам пишется в поля класса. Просто из-за одного забытого байта.
Ну и пишу я не целиком участок памяти на диск, а каждое значение отдельно - т.е. какой-то промежуточный слой конвертации есть.
Ну и пишу я не целиком участок памяти на диск, а каждое значение отдельно - т.е. какой-то промежуточный слой конвертации есть.
Re: Сохранение в игре.
Доделал и почти протестировал сохранение. Ну по крайней мере сохранение карты уровня и всего на неё хранящегося работает - а это около 120 кбайт информации на один уровень. И даже заработало почти без отладки, пришлось только две строчки добавить в сохранении, упустил некоторые переменные когда писал.
В итоге сохранение и последующая загрузка игры - это более 1000 строк кода получилось, немало, думал будет меньше. Ну и отладку очень удобно вести в отладчике Visual Studio - идешь по шагам и смотришь, что пишется в переменные. Как только какая-нибудь координата X получает значение -7874637839, ищешь где ошибся.
В итоге сохранение и последующая загрузка игры - это более 1000 строк кода получилось, немало, думал будет меньше. Ну и отладку очень удобно вести в отладчике Visual Studio - идешь по шагам и смотришь, что пишется в переменные. Как только какая-нибудь координата X получает значение -7874637839, ищешь где ошибся.
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: Сохранение в игре.
Запаковывай сохранку в zip-архив с паролем, будет меньше весить
Re: Сохранение в игре.
Да там много возможностей для оптимизации, у меня все переменные тина int, занимают 4 байта, а там на большинство достаточно по 2 байта, т.к. они вряд ли даже больше 1000 будут, а некоторым и 1 байта за глаза, просто лень сидеть и разбираться, каким сколько надо.
Да и вообще памяти много, диски большие - зачем оптимизировать? А потом удивляемся, почему на четырехядерном проце с 8 гб оперативки просто приложение начинает тормозить, при том что подобное по функциональности на 3-м пентиуме просто летало
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 39 гостей