#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() для каждого дочернего объекта, которым он владеет.