2013-04-29 2 views
1

Я написал платформу 2d в java, и мне было интересно, как я сохраню игру. Я рассмотрел только сериализацию всей игры с использованием XMLEncoder или ObjectOutputStream, однако они не сохранили нити правильно. Когда я снова начал игру, нить не работала. Итак, я попробовал запустить запуск во всех потоках после загрузки игры, но это создало серьезную проблему с тем, что потоки были в недопустимых состояниях, и игра начала сбой. Каков наилучший способ просто написать всю игру в файл сохранения.Сохранение многопоточной игры

+0

Можно ли сохранить состояние ваших потоков, а затем создать новый поток, установить его состояние в том, что вы сохранили, а затем запустить? Трудно дать хороший совет без какого-либо кода или даже намек на то, что проблемы –

+0

Ну, было бы сложно опубликовать код, так как это 1000 строк, но если бы я создал новый поток, это не было бы в той же части его выполнения, если я создал новый поток. –

+0

Вы могли бы работать с группами нитей или отслеживать и сохранять все зависимости между различными потоками? –

ответ

3

Сохранение игры редко будет таким же простым, как сохранение всех объектов точно так же, как они находятся в памяти во время выхода/сохранения, а затем после этого погрузить их обратно в их точное состояние.

Скорее всего, вам понадобится/захочет создать структуру данных для представления состояния вашей игры, которое вы затем будете записывать на диск. Многопоточность вряд ли будет вашей главной задачей. Вы захотите запустить эти потоки заново, когда загрузите свое состояние игры.

Учтите, что многие игры сохраняют/загружают через меню. Если ваша игра начинается с заставки или, по крайней мере, главного меню, вы все равно не захотите загружать объекты из своего точного состояния при запуске. Найдите минимальные важные элементы, которые вам нужны , необходимо восстановить все, что важно для состояния игры, и сохранить это на диске. Большая часть состояния игры может быть неявно воссоздана из очень небольшого количества данных.

К сожалению, точный способ сохранения или загрузки вашей игры нелегко ответить на веб-сайте Q/A, поскольку это будет зависеть от точных структур данных, которые вы используете, и от всей природы вашей игры.

+0

спасибо, плохо сделайте это –

+0

Жаль, что я не мог больше помочь; на самом деле это не краткое одноразовое решение для вашей проблемы. – BlackVegetable

2

Вы должны сериализовать только данные своего бизнес-домена, а не потоки. При повторной загрузке данных необходимо создавать потоки. ObjectOutputStream в порядке, если ваши классы домена являются Serializable.

Смежные вопросы