ActionScript 3: как сохранить двоичные данные в файлы

#flash #actionscript-3

#flash #actionscript-3

Вопрос:

я создаю редактор уровней для своей игры, и мне нужно сохранить данные tilemap (массив 120×120 uint) и данные о персонажах (тип персонажа, положение, поворот, статистика и т.д.) в файл .bin. Как я могу это сделать? Я знаю, что могу сделать это с помощью XMLS, но это не подходит для сохранения tilemaps… Спасибо

Ответ №1:

То, что вы ищете, — это функция сохранения FileReference класса. Смотрите здесь: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#save ()

Это работает только в Flash Player 10 и требует взаимодействия с пользователем. (Откроется диалоговое окно сохранения) Эти ограничения существуют по соображениям безопасности, если вы хотите иметь возможность сохранять fly напрямую (без взаимодействия с пользователем), вам придется использовать AIR, см. FileStream Ссылку на класс для этого: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filesystem/FileStream.html

Чтобы сохранить собственные объекты Flash во внешний файл и загрузить их снова, вам нужно сначала записать данные в ByteArray . ByteArray имеет два метода (writeObject amp; readObject), которые делают это тривиальным. смотрите здесь: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/ByteArray.html

Удачи.

Ответ №2:

Если это веб-игра, запускаемая в веб-браузере, и вы хотите сохранить данные в системе пользователя (не на веб-сервере), я могу предложить два варианта:

Если можно использовать Flash Player 10, вы можете сохранять и загружать данные в локальные файлы и из них по запросу пользователя, например нажатием кнопки (не произвольно из любого места вашего кода) и через стандартное диалоговое окно файла. Смотрите FileReference.save().

Вы также можете хранить данные в локальном SharedObject. Данные могут быть прочитаны и записаны без взаимодействия с пользователем или диалога с файлом. Затем Flash Player сериализует данные за вас, но я думаю, вы должны иметь возможность сохранять данные того типа, который вы описали таким образом.