Сохранение игры (приложение для Android.)

#java #android #save #pickle

#java #Android #Сохранить #рассол

Вопрос:

Это в некоторой степени открытый вопрос.

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

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

Немного информации о настройке игры:

Вся анимация выполняется в потоке через холст и чередование сохраненных кадров растрового изображения на основе цикла продолжительностью 30 мс.

Все является объектом, персонажи, фон — это просто 2d массив объектов. и на каждый объект обычно ссылаются и он создается динамически с помощью hashmap.

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

Но есть ли лучший способ сделать это? Я кратко прочитал, что в python есть метод стерилизации объектов под названием «pickle», и есть нечто похожее под названием «kryo». Я смотрю в правильном направлении?

Комментарии:

1. «стерилизация», мне это нравится 🙂

Ответ №1:

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

Кроме того, всегда есть возможность использовать вашу собственную сериализацию с помощью INSERT SQL-запросов и т.д. Но будьте очень осторожны, легко пропустить части того, что вы хотите сохранить / восстановить. Одним из примеров этого может быть преобразование вашего дерева объектов в XML и сохранение этого XML в виде файла. Существуют очень хорошие сторонние библиотеки для отображения объектов в XML и обратно на Java.

Ответ №2:

Что ж.. Это не СТЕРИЛИЗАЦИЯ, а СЕРИАЛИЗАЦИЯ.. Это метод программирования. И сериализация также является методом, который вы хотите использовать.

Не имеет значения, используете ли вы заранее определенный метод или что-то, что вы пишете самостоятельно, но единственное, что имеет значение, — это перебирать объекты и записывать в файл (или структуру сохранения) дату, которую вам нужно позже перезагрузить.

В любом случае, да, вы ищете правильный путь.

Лучший способ сделать это — реализовать интерфейс сериализации. Каждый объект, для которого вызывается метод serialize(), должен сохранить свои данные, а затем вызвать метод serialize() для каждого дочернего объекта, которым он владеет.