Надежный способ сохранить / загрузить объекты с зависимостями? - PullRequest
2 голосов
/ 11 марта 2010

Я пишу игру для Android на Java, и мне нужен надежный способ быстрого сохранения и загрузки состояния приложения.Кажется, этот вопрос относится к большинству ОО-языков.

Чтобы понять, что мне нужно сохранить: я использую шаблон Стратегии для управления игровыми сущностями.Идея в том, что у меня есть очень общий класс Entity, который, например, хранит местоположение пули / игрока / врага, и затем я присоединяю класс Behavior, который сообщает сущности, как действовать:

class Entiy { float x; float y; Behavior b; }

abstract class Behavior { void update(Entity e); {}

// Move about at a constant speed
class MoveBehavior extends Behavior { float speed; void update ... }

// Chase after another entity
class ChaseBehavior extends Behavior { Entity target; void update ... }

// Perform two behaviours in sequence
class CombineBehavior extends Behavior { Behaviour a, b; void update ... }

По существу, объекты Entityих легко сохранить, но объекты Behavior могут иметь полусложный граф зависимостей между другими объектами Entity и другими объектами Behavior.У меня также есть случаи, когда объект Behavior разделяется между объектами.Я хочу изменить свой дизайн, чтобы упростить сохранение / загрузку, но вышеописанный дизайн очень хорошо подходит для структурирования игры.

В любом случае, я рассмотрел следующие варианты:

  • Использовать сериализацию Java.Это должно быть очень медленно в Android (я буду профилировать это когда-нибудь).Однако меня беспокоит надежность, когда между версиями вносятся изменения.

  • Используйте что-то вроде JSON или XML.Однако я не уверен, как бы я справился с хранением зависимостей между объектами.Должен ли я дать каждому объекту уникальный идентификатор, а затем использовать эти идентификаторы при загрузке, чтобы связать нужные объекты вместе?Я подумал, что мог бы, например, изменить ChaseBehaviour, чтобы хранить идентификатор для сущности вместо ссылки, которая будет использоваться для поиска сущности перед выполнением поведения.

Я бы предпочел не писать самому загружать / сохранять код самостоятельно, поскольку я считаю, что очень легко совершать ошибки (например, забывать что-то сохранять, читать вещи в неправильном порядке)).

Кто-нибудь может дать мне какие-нибудь советы о хороших форматах для сохранения или классах, которые облегчают сохранение состояния?

Ответы [ 2 ]

1 голос
/ 11 марта 2010

Перед использованием обязательно проверьте сериализацию. Я не знаю, как он работает на Android, но для кода Java это известный и эффективный способ сохранения графиков объектов. В любом случае, вы также можете посмотреть ответы на на этот вопрос , где рассматривается сохранение графа объектов с использованием XML.

0 голосов
/ 11 марта 2010

Вы не сказали , почему вы хотите сохранить / загрузить состояние. Если вы хотите защитить от отключения, Возможно, вы захотите взглянуть на использование Bundle и PathClassLoader вместе с onSaveInstanceState и onRestoreInstanceState / onCreate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...