Форум программистов, компьютерный форум, киберфорум
XNA/MonoGame
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 19
1

Сделать сохранение всего процесса игры

06.04.2014, 17:09. Просмотров 1366. Ответов 13
Метки нет (Все метки)

Знакомство с сериализацией и десериализацией только начал. Все основные принципы понял. Но не могу ее явно применить там где мне нужно. А конкретно, у меня есть игра (бильярд). Есть классы шар, кий и т.д. Мне нужно сделать сохранение всего процесса игры. То есть пользователь начинает новую игру и весь процесс игры должен записываться, как на камеру, что бы потом можно было зайти в лог конкретного пользователя и просмотреть все его с играные партии как видео. Обновление графики происходит 24 раза на секунду. И я не могу понять мне каждые 1/24 секунды делать сериализацию классов Шар и Кий? Или каждые 1/24 секунды добавлять экземпляры классов в лист, а потом лист сохранять? Второе кажется будет очень сильно грузить память.
На счет того "зачем так часто сохранять, можно же раз в секунду или еще реже", это я понимаю, просто как пример.
Второй вопрос. Допустим я делаю сериализацию классов каждые 1/24 секунду. Будут ли объекты сохранятся в один файл или в разные? Как лучше учитывая то, что потом их нужно по порядку считывать (десериализировать)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2014, 17:09
Ответы с готовыми решениями:

Как сделать сохранение и загрузку игры
Как сделать сохранение и загрузку игры,предположим что у меня есть игра,я доиграл до середины и...

Как сделать сохранение игры с скриншотами?
Как сделать сохранение игры с скриншотами(отдельными файлами) и при этом сохранить *целое состояние...

Как лучше всего сделать сохранение >100 страниц из word шаблона с заменой ключ. слов в один word файл для посл. печати?
Я вот думаю, как? Точнее не думаю, я уже приступлю к созданию всего этого завтра, но хотел бы...

Сохранение процесса Delphi
Пожалуйста помогите.Как сделать так,чтобы когда вышел например из exe файла проекта,после...

13
444 / 348 / 32
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
06.04.2014, 17:22 2
Проще будет написать свой сериализатор, используя StreamWriter/BinaryWriter
0
1 / 1 / 0
Регистрация: 29.03.2014
Сообщений: 50
06.04.2014, 18:20 3
Делай так, при каждом изменении позиции шара создавай класс, в него записывай время новое положение шара, а потом просто по времени применяй по очереди записанное положение из этих классов.
0
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 19
06.04.2014, 23:41  [ТС] 4
Цитата Сообщение от za5 Посмотреть сообщение
Проще будет написать свой сериализатор, используя StreamWriter/BinaryWriter
Ну сейчас еще не о коде вопрос. Я просто хочу понять, как это делать. Сначала все экземпляры в лист, а потом сохранить лист и когда надо считать его? Или может каждый тик таймера сохранять текущий экземпляр класса в файл? Если второе, то можно ли экземпляры пихать в один файл, что б потом по очереди (в цикле например) читать их? Или нужно каждый экземпляр в отдельный файл сохранять? Или еще как то?

Добавлено через 4 минуты
Цитата Сообщение от mc Sidh Посмотреть сообщение
Делай так, при каждом изменении позиции шара создавай класс, в него записывай время новое положение шара, а потом просто по времени применяй по очереди записанное положение из этих классов.
Не понял зачем создавать новый класс, если в классе Шар у меня и так все нужные поля есть. Просто нужно каждый тик сохранять этот класс, а потом каждый тик по очереди (как в цикле) считывать. В случае с листом, мне интуитивно понятно, как это сделать, но я думаю что за 30 минут игры в листе будет порядка 700000 элементов, что не очень хорошо для памяти. эффективней бы было сразу писать в файл, а не в лист.
0
325 / 114 / 7
Регистрация: 01.05.2011
Сообщений: 283
Записей в блоге: 3
07.04.2014, 07:50 5
Зачем все это?? О_о
Записывай "действия" игрока и время. Например:
1) [21:21:0000] Удар кием
2) [21:21:5000] Удар кием
....
Даже больше в голову не приходит, какие еще могут быть действия
0
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 19
07.04.2014, 10:47  [ТС] 6
Цитата Сообщение от ImAlexSmith Посмотреть сообщение
Зачем все это?? О_о
Записывай "действия" игрока и время. Например:
1) [21:21:0000] Удар кием
2) [21:21:5000] Удар кием
....
Даже больше в голову не приходит, какие еще могут быть действия
Нужно, что бы была не просто статистика, а целиком партия. Которую можно посмотреть.

Добавлено через 14 минут
И вообще, можно ли в один файл, посредством Append, записывать экземпляры классов, а потом в цикле, как бы построчно (по объектно) считывать их?
0
325 / 114 / 7
Регистрация: 01.05.2011
Сообщений: 283
Записей в блоге: 3
07.04.2014, 11:00 7
Цитата Сообщение от Horlos Посмотреть сообщение
Нужно, что бы была не просто статистика, а целиком партия. Которую можно посмотреть.
Прекрасно, почему нет....? При старте "просмотра партии" начинаем запускать "действия" из сохраненного списка по таймеру (или даже систему навигации по истории запилить, типо undo/redo).
А, наверное непонятно что такое "действия игрока"? Ну насколько это вижу я - это имена методов и передаваемые параметры, которые были вызваны игроком из интерфейса игры. Короче смысл в том, чтобы заставить игру играть саму с собой.
Варианты с сохранением всех объектов во все периоды времени - не варианты, размеры файлов и затраты памяти будут нереальные.
1
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 19
07.04.2014, 13:08  [ТС] 8
Цитата Сообщение от ImAlexSmith Посмотреть сообщение
Прекрасно, почему нет....? При старте "просмотра партии" начинаем запускать "действия" из сохраненного списка по таймеру (или даже систему навигации по истории запилить, типо undo/redo).
А, наверное непонятно что такое "действия игрока"? Ну насколько это вижу я - это имена методов и передаваемые параметры, которые были вызваны игроком из интерфейса игры. Короче смысл в том, чтобы заставить игру играть саму с собой.
Варианты с сохранением всех объектов во все периоды времени - не варианты, размеры файлов и затраты памяти будут нереальные.
Ага.. я понял. То есть можно просто запоминать действие, например "удар кием(сила удара, направление)"?! А записывать эти данные в лист и сериализироать/десериализировать потом лист?
0
1 / 1 / 0
Регистрация: 29.03.2014
Сообщений: 50
07.04.2014, 13:41 9
Ага.. я понял. То есть можно просто запоминать действие, например "удар кием(сила удара, направление)"?! А записывать эти данные в лист и сериализироать/десериализировать потом лист?
Ух ты! А что я вам писал вторым постом? Того гляди, скоро людей понимать начнете
0
444 / 348 / 32
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
07.04.2014, 15:20 10
mc Sidh, в сообщении ты говорил, что надо записывать положения всех шаров при каждом изменении их позиции. памяти много уйдёт. лучше на каждом кадре записывать положения кия, для плавной анимации при воспроизведении. а также параметры удара и по какому шару. сначала покажется, что мы не сможем просмотреть запись не с самого начала... но можно быстро просчитать какими будут позиции всех шаров после k ударов.

Добавлено через 5 минут
такой подход в теории должен отлично сработать, случайных погрешностей быть не должно, если конечно не использовать сторонний физдвижок, когда нет уверенности в том когда и где шары остановятся и в однозначности всего этого, тогда да - можно записывать все позиции.
1
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 19
07.04.2014, 15:58  [ТС] 11
Хотелось бы еще услышать ответ на вопрос, как сохранять? Фигачить сначала все в лист, а потом сохранять лист или просто по очереди писать в конец файла? (3 раз дублирую вопрос)
0
1 / 1 / 0
Регистрация: 29.03.2014
Сообщений: 50
07.04.2014, 19:04 12
Horlos, точно сказать не могу, но если стандартный List<> не сериализуется, то придется писать свой класс-сериализатор для него. А если есть, то фигач в лист все.
1
45 / 45 / 4
Регистрация: 14.02.2013
Сообщений: 139
08.04.2014, 20:11 13
Мне сразу вспомнились реплеи из Доты и Лиги Легенд.
Работает по принципу - игрок кликнул мышью, сохранилось действие, координаты, а путь к объекту должен получиться таким же как и в оригинале (ведь алгоритм просчета пути должен выдавать один и тот же результат)
0
58 / 58 / 9
Регистрация: 09.01.2013
Сообщений: 247
09.04.2014, 21:05 14
У меня для записи используется пара значений время-пакет (отправленный или полученный с сервера). В вашем случае лучше записывать ввод, или отдельные события. Вопрос лишь в том, чтобы воссоздать все данные.
В IO лучше писать через открытый стрим. Произошло событие - получили байты, и сразу сохранили в файл без всяких листов и т.п.

Добавлено через 47 секунд
Цитата Сообщение от mc Sidh Посмотреть сообщение
Horlos, точно сказать не могу, но если стандартный List<> не сериализуется, то придется писать свой класс-сериализатор для него. А если есть, то фигач в лист все.
BinaryFormatter
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2014, 21:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сохранение процесса Windows 7
Доброго времени суток... Сорри, если тема не совсем в том разделе (ну а вообще семерка, вроде там,...

Сохранение и последующее восстановление процесса
Требуется написать программу, которая бдет по расписанию сохранять некоторый процесс, полный дамп....

Где лучше всего качать игры?
Подскажите где лучше всего качать игры :rtfm: дайте ссылку на сайт заранее спасибо:good:

Трудности в начале процесса разработки игры
Всем привет! Только начал работать с Unity, поэтому в процессе накопилось несколько моментов,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.