Опубликован: 04.11.2006 | Уровень: специалист | Доступ: платный
Урок 11:

Организация ввода и вывода данных во Flash

< Урок 10 || Урок 11: 12345 || Урок 12 >

Применение общих объектов

Файл SWF способен сохранять данные (как переменные, так и массивы, XML и другие объекты данных) на жесткий диск пользователя посредством общих объектов: возможность, схожая с cookies, используемыми веб-браузерами, но более мощная. Общие объекты могут хранить информацию, генерируемую пользователем при просмотре фильма (имя, последний посещенный кадр, музыкальные установки и многое другое). Общие объекты могут использоваться как фильмами, проигрываемыми в браузере, так и теми, которые опубликованы как самостоятельные проекторы.

Примечание Общие объекты также можно использовать при посредстве Flash Application Services от Macromedia (подробности о Flash Application Services вы найдете на macromedia.com).

Вот пример скрипта, создающего общий объект:

myObject = SharedObject.getLocal("stuff_I_saved");

Если общий объект "stuff_I_saved" существует на жестком диске пользователя, данные из него будут загружены в myObject. Если "stuff_I_saved" не существует, он будет создан – по-прежнему со ссылкой на myObject. В последнем случае myObject может быть пустым, не содержащим никаких данных.

Примечание Еще раз поясним, что один и тот же метод – getLocal() – и создает общий объект (если он не существует), и получает данные из существующего общего объекта.


Как вы видите в примере, настоящее имя общего объекта – "stuff_I_saved". Однако в ActionScript прямо обратиться к нему по этому имени нельзя; ссылка на этот общий объект создается при помощи myObject. Это значит, что в скриптах все обращения к myObject на самом деле будут обращениями к общему объекту с именем "stuff_I_saved" – концепция немного мудреная, но понять ее важно для работы с общими объектами в ActionScript.

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

myObject.data.userName = userName.text;

Эта строка сохраняет переменную userName (и ее значение – текст из поля userName ) в общем объекте. Так можно сохранять не только переменные, но и целые объекты. Например, если нужно сохранить имеющийся в проекте массив, используется тот же синтакис:

myObject.data.savedArray = nameOfArray;

Единственный общий объект может хранить одновременно несколько элементов данных:

myObject.data.savedArray = nameOfArray;
myObject.data.savedXML = nameOfXMLObject;
myObject.data.userName = userName.text;

Удалить из общего объекта имеющийся элемент данных можно при помощи null, как в этом примере:

myObject.data.userName = null;

Этот скрипт "сотрет" элемент userName из общего объекта.

Извлечь данные из общего объекта так же просто, как сохранить:

userName.text = myObject.data.userName;

Этот скрипт отобразит в текстовом поле userName значение переменной userName из общего объекта. Если в общем объекте такая переменная не существует, в текстовом поле будет отображено "undefined".

По завершении сеанса SWF (то есть, когда фильм закончится или будет закрыт пользователем) вся информация свойства data общего объекта автоматически записывается в файл общего объекта, и может быть получена с помощью метода getLocal(), как мы описывали. Можно и специально сохранить общий объект (записать в файл), применив метод flush(). Например:

myObject.flush();

Эта строка скрипта вызывает сохранение общего объекта и всех данных, которые он содержит. Поскольку myObject есть ссылка на общий объект "stuff_I_saved", под этим последним именем и будет сохранен общий объект.

Flash помещает все общие объекты в одно общее "хранилище"; при этом точное расположение каждого общего объекта зависит от того, где находится фильм, создавший этот объект.

В Windows все общие объекты помещаются в следующий каталог:

Windows\Application Data\Macromedia\Flash Player\

На Macintosh:

System Folder\Preferences\Macromedia\Flash Player\

Это – общие, основные каталоги, общие объекты, создаваемые фильмами, помещается в соответствующие подкаталоги основного каталога. Предположим, что фильм был запущен с такого URL:

http://www.electrotank.com/fun/games/MiniGolf.swf

Все общие объекты, созданные этим фильмом, на машине под Windows будут, по умолчанию, сохранены в каталог:

Windows\Application Data\Macromedia\Flash Player\electrotank.com\fun\games\MiniGolf

Обратите внимание – структура создаваемых подкаталогов соответствует URL.


Фильмы, запускаемые локально (как проекторы) не имеют URL, и потому Flash сохраняет создаваемые ими общие объекты в подкаталоге localhost:

Windows\Application Data\Macromedia\Flash Player\localhost

Все указанные здесь пути и каталоги используются для сохранения общих объектов по умолчанию. Вы обладаете полной свободой при размещении и загрузке общих объектов – но в пределах основного каталога. Как в предыдущем примере, предположим, что воспроизведенный фильм находится по URL

http://www.electrotank.com/fun/games/MiniGolf.swf

В этом фильме имеется следующий общий объект:

myScores = SharedObject.getLocal("scoreData");

При сохранении этого общего объекта путь к нему (под Windows) будет таким:

Windows\Application Data\Macromedia\Flash Player\electrotank.com\fun\games\MiniGolf\scoreData.sol

Когда этот фильм будет вновь запущен с того же URL, Flash будет искать общий объект именно в этом месте. Однако метод getLocal() позволяет дополнительно указать путь, по которому следует сохранять и впоследствии искать общий объект. Предположим, что в том же фильме общий объект объявлен таким образом:

myScores = SharedObject.getLocal("scoreData", "/fun");

В этом случае путь к общему объекту будет следующим:

Windows\Application Data\Macromedia\Flash Player\electrotank.com\fun\scoreData.sol

Зная это, вы можете создавать фильмы, которые расположены в разных местах, но при этом используют один и тот же общий объект – очень полезная возможность, если вы хотите, например, чтобы все фильмы вашего сайта использовали один общий объект, содержащий, скажем, информацию о пользователе. Просто сохраните этот общий объект в основной каталог ("/").

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

Один фильм может одновременно работать – создавать, сохранять и загружать – с несколькими общими объектами.

Совет. Можно ограничить количество данных, которые данный URL имеет право поместить на ваш жесткий диск посредством Flash Player. Щелкнув правой кнопкой мыши в окне открытого SWF и выбрав в меню Settings, перейдите в открывшемся окне настроек на вкладку Local Storage. Здесь можно для любого сайта ограничить или вообще запретить сохранение информации на вашем жестком диске.


Примечание На прилагаемом к книге CD-ROM, в папке этого урока, имеется бонусный файл – highscorelist.fla. Файл может показаться вам довольно сложным, однако он весьма удобен для локального хранения набранных очков в игре, причем на одном компьютере может быть несколько пользователей – для каждого из них ведется отдельный счет. Для управления списком можно использовать объект highScoreList, описанный в этом файле. Среди прочего, здесь можно отсортировать список по возрастанию или убыванию, удалить список, начать новый, исправить сущестующий счет в списке и добавить новый.

< Урок 10 || Урок 11: 12345 || Урок 12 >
Салтанат Бектегенова
Салтанат Бектегенова

Дострочное пересдача экзамена

 

Евгений Стародубцев
Евгений Стародубцев

Вот задание:

7. Открыв панель Действия (Actions) и установив ее в Экспертный режим(Expert Mode), выделите кадр 1 слоя Actions и введите следующий скрипт:

Евгения Дегтяренко
Евгения Дегтяренко
Украина, Запорожье
Анна Елисеева
Анна Елисеева
Россия, Великий Новгород, Ногородский государственный университет имени Ярослава Мудрого, 2003