Статьи

Совет: Работа с SharedObjects

В этом кратком совете я покажу вам, как хранить и получать доступ к SharedObjects (Flash-эквивалент файлов cookie), чтобы вы могли сохранять и загружать пользовательские данные между сеансами.


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

Обратите внимание, что анимация вступления не воспроизводится, если вы уже видели ее один раз. Попробуйте войти в систему (вы можете использовать любую комбинацию имени пользователя и пароля), а затем обновить браузер без выхода из системы. Ваши данные будут автоматически введены.

Для сброса данных, сохраненных в SharedObject, войдите, а затем снова выйдите из системы.


Первое, что нужно сделать, это загрузить исходные файлы для этого урока. Так как этот урок — быстрый совет, я пропущу шаги макета. Как только вы загрузите файлы, откройте файл sharedObject.fla. Когда файл загрузится, вы заметите, что у нас есть три ключевых кадра на временной шкале.

Первый ключевой кадр содержит вводную анимацию. Анимация — это просто видеоклип с анимацией движения и действием «Стоп» в конце.

Второй ключевой кадр — это экран входа в систему. Здесь пользователь может ввести свою информацию. Они могут сохранить это или нет. Если пользователь нажмет кнопку «Смотреть анимацию снова», он вернется к первому ключевому кадру. Кроме того, SharedObject, который мы собираемся установить, будет удален.

Последний ключевой кадр содержит простую программу чтения RSS-канала ActiveTuts +. Если пользователь нажмет кнопку «Выйти», он вернется ко второму ключевому кадру и SharedObject будет очищен. Это означает, что пользователь будет просматривать анимацию вступления при следующем посещении сайта.


Создайте новый файл «ActionScript» и сохраните его в той же папке, что и «sharedObject.fla». Дайте файлу имя «sharedObject.as.» Затем свяжите файл Flash и файл ActionScript вместе на панели «Свойства». Для более детального изучения того, как настроить класс Document, посетите этот другой Быстрый совет .


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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
package {
 
    import flash.display.MovieClip;
    import flash.display.SimpleButton;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.net.SharedObject;
    import flash.net.URLLoader;
    import flash.text.TextField;
 
    public class sharedObject extends MovieClip
    {
         
        public function sharedObject()
        {
             
        }
    }
}

Вот что говорит язык ActionScript 3.0 о SharedObjects:

Класс SharedObject используется для чтения и хранения ограниченных объемов данных на компьютере пользователя или на сервере. Общие объекты обеспечивают обмен данными в режиме реального времени между несколькими клиентскими SWF-файлами и объектами, которые сохраняются на локальном компьютере или удаленном сервере. Локальные общие объекты похожи на файлы cookie браузера, а удаленные общие объекты аналогичны устройствам передачи данных в реальном времени. Чтобы использовать удаленные общие объекты, вам необходим Adobe Flash Media Server.

В этом примере мы будем работать только с локальными общими объектами. Чтобы начать работу с SharedObjects, мы создаем переменную с именем «shared» и приводим ее как SharedObject. Далее мы используем метод getLocal класса SharedObject. Я дал ему имя «пример», но вы можете дать ему любое имя.

После того, как мы инициализировали наш SharedObject, мы вызываем функцию ‘init’. В функции ‘init’ мы останавливаем основную временную шкалу. Мы также проверяем SharedObject, чтобы увидеть, была ли просмотрена анимация вступления. Если это так, мы отправляем пользователя в кадр 2. Если свойство ‘watched’ в объекте ‘data’ нашего SharedObject не было установлено, мы воспроизводим анимацию и ожидаем ее завершения с использованием события ENTER_FRAME.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package {
    import flash.display.MovieClip;
    import flash.display.SimpleButton;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.net.SharedObject;
    import flash.net.URLLoader;
    import flash.text.TextField;
 
    public class sharedObject extends MovieClip
    {
        private var shared:SharedObject;
         
        public function sharedObject()
        {
            shared = SharedObject.getLocal(«example»);
            init();
        }
        private function init():void
        {
            this.stop();
            if(shared.data.watched === true)
            {
                this.gotoAndStop(2);
                frame2handler();
            }
            else
            {
                this.addEventListener(Event.ENTER_FRAME, onEnter);
            }
        }
    }
}

В функции «onEnter» мы слушаем, чтобы увидеть, достигла ли анимация конца своих кадров. После этого мы удаляем прослушиватель событий, переходим ко второму ключевому кадру на главной временной шкале и вызываем функцию frame2handler. Мы также устанавливаем свойство watched для объекта data объекта SharedObject. Поскольку «данные» — это объект, мы можем присвоить ему любое значение. Я просто использовал «наблюдал» в качестве индикатора для анимации вступления.

Далее мы вызываем метод flush объекта SharedObject. Это сохранит SharedObject в соответствующий локальный файл и будет доступен для дальнейшего использования.

01
02
03
04
05
06
07
08
09
10
11
private function onEnter(event:Event):void
        {
            if(animation.currentFrame === animation.totalFrames)
            {
                this.removeEventListener(Event.ENTER_FRAME, onEnter);
                this.gotoAndStop(2);
                frame2handler();
                shared.data.watched = true;
                shared.flush();
            }
        }

В функции frame2handler вы заметите, что я вызываю метод addFrameScript. Используя этот метод, мы можем получить доступ к различным мувиклипам в разных частях временной шкалы. addFrameScript основан на нуле, поэтому, чтобы получить доступ к MovieClips в кадре 2, мы передаем его 1. Также мы передаем ему встроенную функцию для обработки любой логики в кадре 2. Внутри этой функции мы проверяем, есть ли SharedObject имеет установленные значения «user», «password» и «запомнить». Если они есть, мы заполняем текстовые поля соответствующей информацией.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
private function frame2handler():void
{
    this.addFrameScript(1, function(){
        if(shared.data.user != null && shared.data.password != null)
        {
            user.text = shared.data.user;
            password.text = shared.data.password;
            remember.selected = shared.data.remember;
        }
        remember.label = «Remember me»;
        enter.addEventListener(MouseEvent.CLICK, onClick);
        watcher.addEventListener(MouseEvent.CLICK, onClick);
    });
}

Поскольку приложение маленькое, мы будем обрабатывать все клики с помощью одной функции. Внутри функции «onClick» мы проверяем имя цели события. Если имя «enter», мы проверяем, хочет ли пользователь запомнить свою регистрационную информацию. Если они это сделали, мы просто добавляем больше значений к объекту data. Если нет, мы удалим эти значения из объекта «данные». После этого мы отправляем пользователя в кадр 3 и вызываем frame3handler. Если пользователь нажал кнопку «наблюдатель», мы удаляем значение, связанное с вводной анимацией. Затем пользователь возвращается к первому кадру, и мы вызываем функцию ‘init’, используя ‘addFrameScript.’ Наконец, в третьем кадре, если пользователь нажимает кнопку «очистить», мы очищаем объект «данные» и все значения SharedObject стираются. Затем пользователь отправляется обратно в кадр 2, и никакая его информация не сохраняется.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private function onClick(event:MouseEvent):void
{
    switch(event.target.name)
    {
        case «enter» :
            if(remember.selected)
            {
                shared.data.user = user.text;
                shared.data.password = password.text;
                shared.data.remember = remember.selected;
                shared.flush();
            }
            else
            {
                delete shared.data.user;
                delete shared.data.password;
            }
            this.gotoAndStop(3);
            frame3handler();
        break;
        case «watcher» :
            delete shared.data.watched;
            this.gotoAndStop(1);
            this.addFrameScript(0, function(){
                init();
            });
        break;
        case «clearer» :
            shared.clear();
            this.gotoAndStop(2);
        break;
    }
}

В функции frame3handler мы снова используем addFrameScript для доступа к MovieClips в кадре 3. Внутри встроенной функции мы загружаем RSS-канал и используем компоненты List и TextArea для отображения информации.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
private function frame3handler():void
{
    this.addFrameScript(2, function(){
        clearer.addEventListener(MouseEvent.CLICK, onClick);
        var url:URLLoader = new URLLoader();
        url.addEventListener(Event.COMPLETE, function(){
            var xml:XML = new XML(url.data);
            var xmlList:XMLList = xml..item;
            for(var i:int = 0; i<xmlList.length(); i++)
            {
                list.addItem({label:xmlList[i].title.text(), data:xmlList[i].description.text()});
            }
            list.selectedIndex = 0;
            area.htmlText = list.selectedItem.data;
            list.addEventListener(Event.CHANGE, function(){
                area.htmlText = list.selectedItem.data;
            });
        });
        url.load(new URLRequest(«http://feeds.feedburner.com/flashtuts»));
    });
}

Существует множество приложений для SharedObjects. Просто проверьте любой сайт, такой как Pandora, или игровые сайты, такие как Adult Swim . Однако лучший способ учиться — это экспериментировать самостоятельно и, конечно же, подписаться на Tuts + .

Спасибо за подписку!