Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастерство Flash. Профессиональные техники программирования


Информационный Канал Subscribe.Ru


Здравствуйте, мои прибавляющиеся в числе подписчики.

Сегодняшний выпуск посвящен страдальческому воплю, раздавшемуся поутру в конференции "Флешер.ру". Вопль был таков: "Как создать XML объект и сохранить его в SharedObjects?" Вопрошавший был удивлен тем, что его дружно отправили к Камасутре (RTFM), но что поделать – наши гуру не любят объяснять что-то сложнее колеса или проще реактивного истребителя ;-) Я так же себя вел, пока не взвалил на хрупкие плечи миссию спасения пропадающих в тьме невежества юных флешеров.

Но довольно лирики, приступим к физике и математике.

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

Для начала создадим SharedObject. Это делается одной простой строчкой:

var mySO = SharedObject.getLocal("myGameName");

Если нужно создать SharedObject, доступный из всех клипов – надо использовать абсолютный путь от Flash Environment::

var mySO = SharedObject.getLocal("myGameName","/");

Это позволит создать объект, лежащий в корне всех шар ( назовем это так).

Теперь создадим XML объект

mySO.data.myGameXml=new XML();

Создадим в этом объекте два узла, которые будут содержать имя, очки и номер следующего уровня. Напомню, что createElement и createTextNode создают в XML объекте соответственно узел и текстовый узел, не привязанные к дереву, а appendChild вставляет узел последним потомком узла, который вызвал эту функцию.

Сначала создадим узел с именем пользователя и добавим в него текст – это самое имя

mySO.data.myGameXml.appendChild(mySO.data.myGameXml.createElement('Name'));
mySO.data.myGameXml.firstChild.appendChild(mySO.data.myGameXml.createTextNode(userName));

Теперь создадим узел с значением очков, лежащим в свойстве score и следующим доступным уровнем в свойстве level

mySO.data.myGameXml.appendChild(mySO.data.myGameXml.createElement('gameData'));
mySO.data.myGameXml.lastChild.attributes['score']=scoreValue;
mySO.data.myGameXml.lastChild.attributes['level']=nextLevel;

Снова вернемся к шарам (SharedObject).

Если мы хотим сделать работу с шарами полноценной, нам не обойтись без обработки событий. Для начала отловим событие onStatus:

mySO.onStatus = function(statusObj){
    if(statusObj.level=="error"){
        trace("Предоставлено недостаточно места на диске ");
        trace(statusObj.code);
        // SharedObject.Flush.Failed
     }
}

Теперь сохраним данные и отловим запрос на их сохранение:

var flushStatus = SO.flush();
if (flushStatus == "pending") {
     trace("ждем пользователя ...");
} else if (! flushStatus) {
    trace("Пользователь отказался от сохранения");
}

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

Жду ваших писем и вопросов. на ilya_cat@mail.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное