ActionScript 3: Сохранение данных при помощи SharedObject в AdobeFlash

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

SharedObjects очень похожи на куки браузера, однако, они не сохраняются в куках браузера и не удаляются, когда пользователь удаляет обычные куки, вместо этого они полностью управляются Flash Player’ом.

Для продолжения данного урока рекомендуется ознакомиться с основными понятиями AS3: что такое переменные, типы данных, классы, свойства и методы.

Flash-приложение, расположенное ниже, показывает пример, в котором будет запоминаться расположение объектов, даже если вы обновите страницу.

Перетащите и отпустите объект, затем обновите страницу или перезапустите браузер, объекты сохранят свою позицию

Этот урок состоит из следующих тем:

  1. Метод getLocal()
  2. Сохранение данных
  3. Загрузка данных
  4. Удаление данных
  5. Практический пример

Использование метода getLocal()

Метод getLocal() является основным понятием класса SharedObject. В отличие от большинства классов ActionScript, где используется ключевое слово new для создания экземпляра класса, здесь нужно использовать просто метод getLocal(). Этот метод проверяет, существует ли сохраненный экземпляр объекта, если нет, то создается объект, иначе происходит простая загрузка существующего объекта для дальнейших манипуляций.

Данный метод используется в следующем общепринятом формате кода:

var myVariableName:SharedObject = SharedObject.getLocal("mySharedObjectID");

Имя переменной (myVariableName) — это ссылка, которую вы будете использовать внутри программы при указании на объект класса SharedObject, в то время как «mySharedObjectID» — это идентификатор, который будет использоваться только для хранения и чтения этого объекта из памяти Flash Player’а.

Даже если вы захотите сохранить больше чем одну часть информации, вы можете использовать только один SharedObject для этого. Данный объект может иметь столько угодно свойств данных, пока его размер не превысит лимит, установленный пользователем в настройках Flash Player’а. Максимальное значение по умолчанию для хранения данных 100Кб — что намного больше, чем то, которое необходимо для хранения простой информации данных пользователя.

Для начала используйте следующий код для создания SharedObject:

var shared_object:SharedObject = SharedObject.getLocal("shared_test");

В следующей главе будет рассмотрено, как сохранять данные в этот объект.

Основное использование класса SharedObject

Для того, чтобы данные были сохранены внутри SharedObject необходимо выполнить следующие условия:

  1. Создайте экземпляр класса SharedObject, используя метод getLocal().
  2. Сохраните данные внутри экземпляра SharedObject.
  3. Запишите экземпляр SharedObject в Flash Player, используя метод flush().

Мы говорили о первом шаге ранее, вы просто создаете SharedObject используя метод getLocal() :

var mySharedObject:SharedObject = SharedObject.getLocal("republicofcode");

Этот код создаст SharedObject. Чтобы добавить новые данные в SharedObject нужно использовать свойство .data для хранения любых данных, которые вам необходимы. Например, мы сохраним имя и фамилию пользователя, каждый в отдельном контейнере данных.

var mySharedObject:SharedObject = SharedObject.getLocal("republicofcode");
mySharedObject.data.firstName = "John";
mySharedObject.data.lastName = "Doe";

Эти данные теперь присоединены к SharedObject, который в настоящее время обрабатывается в приложении, чтобы сохранить эти данные в Flash Player, а затем прочитать их в будущих сессиях, нужно использовать метод flush() следующим образом:

var mySharedObject:SharedObject = SharedObject.getLocal("republicofcode");
mySharedObject.data.firstName = "John";
mySharedObject.data.lastName = "Doe";
mySharedObject.flush();

Этот код сохранит данные в Flash Player.

Загрузка сохраненных данных в SharedObject

Чтение данных, сохраненных как SharedObject , очень похоже на процесс их сохранения. Для этого требуется только два шага, сначала получение фактического SharedObject при помощи метода getLocal(), затем загрузка данных через свойство данных.

Как было сказано ранее, использование метода getLocal() — это специальный процесс, который пытается проверить существует ли SharedObject перед тем, как попытаться создать его. Если объект не существует, то он просто создается и помещается в переменную:

var shared_object:SharedObject = SharedObject.getLocal("shared_test");

Как только вы получили SharedObject, можете извлечь содержимое внутри него напрямую, обратившись к информации через свойство данных:

var mySharedObject:SharedObject = SharedObject.getLocal("republicofcode");
trace(mySharedObject.data.firstName);
trace(mySharedObject.data.lastName);

Если просто вставить этот код и протестировать приложение, то в окне output будут выведены имена, которые мы определили ранее.

Удаление данных

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

var mySharedObject:SharedObject = SharedObject.getLocal("republicofcode");
mySharedObject.clear();

Практический пример

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

Чтобы проверить этот код, вы должны создать объект MovieClip на сцене и назначить имя экземпляру logo_mc:

var mySO:SharedObject = SharedObject.getLocal("republicofcode");

logo_mc.x = mySO.data.my_x;
logo_mc.y = mySO.data.my_y;

if (!mySO.data.my_y) {
  logo_mc.x = 150;
  logo_mc.y = 100;
}

logo_mc.addEventListener (MouseEvent.MOUSE_DOWN, onDown);
function onDown (e:MouseEvent):void {
  var my_mc = e.target;
  my_mc.startDrag ();
}

logo_mc.addEventListener (MouseEvent.MOUSE_UP, onUP);
function onUP (e:MouseEvent):void {
  logo_mc.stopDrag ();
  mySO.data.my_x = logo_mc.x;
  mySO.data.my_y = logo_mc.y;
  mySO.flush ();
}

logo_mc.buttonMode=true;

Пример с исходниками вы можете скачать здесь.

Вы можете узнать больше об условных операторах и управлении событиями в AS3, просмотрев следующие уроки по этим темам.

Комментариев: 2 на “ActionScript 3: Сохранение данных при помощи SharedObject в AdobeFlash

  1. «SharedObjects очень похожи на куки браузера, однако, они не сохраняются в куках браузера и не удаляются» — это раньше так было, например сейчас все удаляется из браузера путем чистки истории причем например Опера и Гуглхром используют видимо разные локальные хранилища для флеша, т.к. введя SharedObjects в одном браузере, во втором его извлеч не получается. Время не стоит на месте… Статья устратевает!

    1. Да, время не стоит на месте. И в том что наконец-то браузеры научились чистить данные SharedObjects, это минус браузерам, а не флешу. Суть же статьи не во взаимодействии браузера с данными из SharedObjects, а в работе самого флеша с ними, а в этом изменений нет! Ну и конечно, вас статья не обязывает пользоваться ни SharedObjects, ни флешом в целом, используйте свои «современные» наработки. 😉

Комментировать

Почта не публикуется.Обязательные поля отмечены *