Flash Lite 2.0 — Сохранение пользовательских данных

Скачать Flash Lite Save Data

Класс Shared Object позволяет пользователю сохранять локальную информацию с устройства. К примеру пользовательские настройки, имена, набранные очки и т.д. Сохранение данных позволяет сделать приложение интерактивным. Другими словами, вы можете считать что Flash Lite Shared Object и Cookies очень близкие понятия.

Shared objects находятся в системной директории мобильного телефона (обычно это C:\System\Apps\saflash2\) и имеют свой собственный формат. Пример этого приложения находится в архиве и называется visits.fla

Для того чтобы использование shared object на мобильном устройстве стало доступным, необходимо его включить следующей коммандой SharedObject.getLocal():

var mySO:SharedObject = SharedObject.getLocal("visits");
SharedObject.addListener("visits", soInitHandler);

В этом коде был создан объект mySO, который ассоциируется с shared object на устройстве с именем visits. Важно заметить, что в отличии он обычных приложений мобильная версия shared object не позволяет обмениваться данными между двумя Flash мувиками. Также хорошей практикой является добавление listener к объекту shared object т.к загрузка данных очень медленная на мобильных устройствах. С листенером вы можете быть уверены что информация будет доступна только после ее полной загрузки, что поможет избежать множества ошибок.

Shared object бесполезен, если в нем не хранится информация. Поэтому я создал свойство которое назвал count и установил его значение равным 1.
mySO.data.count = 1;

Опция flush — опциональна. Вы можете хранить сдесь данные или записывать их на устройство сразу:
mySO.flush();

Когда вы вызываете аттрибут, он всегда возвращает Boolean значение true/false или строку сообщения. Если вы откроете второй демо файл maxSizeError.fla, вы можете увидеть отображение состояния передачи данных.

Во втором фрейме файла я выполняю передачу сразу же после установки значения свойства count. Мы не будем углублятся в детали функции flush т.к вы можете найти более подробную информацию в Flash Lite 2.0 CDK.

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

SharedObject.getSize();
SharedObject.getMaxSize();

Функция getSize() возвращает текущий размер shared object в байтах. Функция getMaxSize() возвращает общий объем shared object зарезервированный для всех приложений на устройстве.

Функция getSize() особенно важна, если вы записываете данныве в shared object в первый раз. Ее можно использовать чтобы проверить и установить количество информации, которое вы собираетесь записать.

Сохранение информации

Данные во Flash Lite shared objects передается через свойства. Эти свойства могут иметь различные типы данных, такие как Integer, String, Array, Object, Date, Boolean, и др.

Откройте dataTypes.fla и выберите первый кадр. Сдесь находится код, описывающий различные типы данных, которые в последующем будут объединены в один shared object объект.

Этот код проверяет содержит ли shared object свойства данных, используя функцию getSize(). Если содержит, тогда данные копируются из свойств shared object в глобально определенные переменные Flash.
Во время выполнения приложения глобальные переменные во Flash могут могут быть назначены или изменены:

Arr.push({name:nameTxt.text, age:ageTxt.text});
count++;
information = "This is your first visit to this page";
Эти переменные теперь можно сохранить в свойства SharedObject:

mySO.data.arr = arr;
mySO.data.count = count;
mySO.data.info = information;

Важно заметить, что эти значения не могут быть назначены и сохранены непосредственно в свойства данных shared object без использования data . Рассмотрите следующие примеры:

mySO.data = someValue //wrong
mySO.variableName = someValue //wrong
mySO.data.variableName = someValue //correct

Если вы будете использовать свойства SharedObject без ключевого слова data, свойства будут восприниматься как private свойства и будут доступны только во время работы приложения. Если приложение будет закрыто — приватные свойства будут утеряны.

Свойства данный могут быть также удалены из shared object, используя оператор delete. Многие разработчики используют null или undefined для очистки свойств, но эти операторы только обнуляют значения, не удаляя их.

Сохранение счета

Сохранение счета в играх — это не тяжелая задача. Откройте Game.fla и sharedObjClass.as чтобы понять как работает счет. используя классовую структуру SharedObject, начните с определения переменных:

private var sharedOb:SharedObject;
private var tracer:String;
private var nameArray:Array = [];
Затем определите конструктор класса. Конструктор проверит, поддерживает ли устройство использование shared objects. Если да — вызывается shared object listener. Если нет — выведется сообщение, информирующее об этом поль зователя:

function sharedObjClass(){
if(System.capabilities.hasSharedObjects){
sharedOb = SharedObject.getLocal("forSample1");
sharedOb.path = this;
SharedObject.addListener("forSampler1", soInitHandler);
}else{
tracer = "Your handset does not support SharedObjects";
}
}

public function appendHighScore(nm:String, time:Number):Void{
nameArray.push({name: nm, time: time});
sharedOb.data.nameArray = nameArray;
sharedOb.flush();
}

Одна очень важная функция здесь, на которую следует обратить внимание — та где был определен массив и сохранен. Когда игра закончится, пользователь увидит текущий счет и сможет ввести имя. Когда он нажмет кнопку Save он вызовет функцию appendHighScore из файла.

В функции appendHighScore, у нас есть массив (nameArray) помещающий объекты с двумя свойствами: name и time. Эти свойства будут общими для каждого объекта, который помещается в массив в конце игры. Данные сразу же записываются в shared object и сохраняются.

ш наконец, когда мы переходим на экран Счет, я вызываю функцию showScores. Эта функция сначала сортирует массив. Опция Array.NUMERIC необходима, т.к в противном случае свойство time будет воспринято как string значение. Например, предположим что nameArray содержит три значения

nameArray = [{name:Mariam, time:35}, {name:Alice, time:23}, {name:Nikita, time:38}];используя функцию sortOn() порядок будет реорганизован:

nameArray.sortOn("time", Array.DESCENDING|Array.NUMERIC);
// {name:Nikita, time:38}
// {name:Mariam, time:35}
// {name:Alice, time:23}
Теперь можно отобразить финальный результат используя цикл for:

for(var x=nameArray.length-1; x>=0; x--){
nm.text = nm.text + nameArray[x].name + "n";
sc.text = sc.text + Math.floor(nameArray[x].time/60) + ":" + nameArray[x].time%60 + ""n";
}

Сохранение пользовательских установок

Вы также можете использовать shared objects для того чтобы сохранить пользовательские настройки, sтакие как качество игры, включен или выключен звук, последний сохраненный уровень, и т.д.

Откройте файл userPrefs.fla чтобы изучить как настройки звука и качества игры будут сохранены:

function writeData():Void{
mySO.data.qual = qual;
mySO.data.sound = snd;
mySO.flush();
}

function setPrefs():Void{
fscommand2("SetQuality", qual);
if(snd == 1){
_root.sndMC.gotoAndPlay(2);
}
}

В случае качества илил звука, когда вы выбираете опцию, код вызывает функцию writeData(). Эта функция просто устанавливает shared object свойства равными значениям приложения.

Затем вызывается функция setPrefs(), которая устанавливает нужные свойства во время загрузки приложения.

Как использовать shared objects

Вот список основных моментов:

  • Найдите правильный путь: Файл приложения должен быть сохранен в таком месте, где доступна работа с shared objects. Если вы попытаетесь запустить файл из папки Сообщения — shared object будут недоступны.
  • Не объединяйте информацию: В приложениях Flash Lite различные SWFs не могут использовать одни и те же данные. Каждый файл должен иметь свой объект данных.
  • Учитывайте размер: Всегда учитывайте максимально доступный лимит для хранения данных на мобильном устройстве. Могут возникать ситуации когда старые данные автоматически стираются при нехватке места для записи новых.
  • Удаляйте неиспользуемые данные shared objects: шспользуйте функцию clear() чтобы сделать это:
    mySO.clear();
  • Компиляция мувика создает новый shared objects: Когда вы заново компилируете Flash file файл не сможет получить доступ к shared object созданному прошлой версией флешки. Это также справедливо, когда две различные SWFs используют одно и тоже имя; они не смогут получить доступ к shared object друг друга.
  • Запись и чтение проходит медленно: Всегда рекомендуется использовать листенер вместе с shared objects. Это поможет убедится что данные будут доступны для чтения, т.к полностью загрузятся.

Добавить комментарий