Дострочное пересдача экзамена
|
Организация ввода и вывода данных во Flash
Применение общих объектов
Файл 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\
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, описанный в этом файле. Среди прочего, здесь можно отсортировать список по возрастанию или убыванию, удалить список, начать новый, исправить сущестующий счет в списке и добавить новый.