Для того, чтобы открыть файл с именем userBase.sol, нужно использовать метод SharedObject.getLocal (получить локальную ссылку):
v = SharedObject.getLocal ( "userBase" );Теперь обращаться к объекту можно через переменную v. Все данные, которые нужно сохранить, рассматриваются как свойства поля data. Например, проверить существование переменной base можно так
if ( v.data.base != undefined ) trace ( "Нашли!" ); else trace ( "Нету..." );Напомним, что undefined обозначает неизвестную (неопределенную) величину. В программе можно добавить новые элементы к полю data:
v.data.x = 12;Удалить эту переменную можно с помощью оператора delete:
delete v.data.x;
Если нужно очистить все переменные, используют метод clear:
v.clear();
Разделяемый объект автоматически записывается на диск при
завершении работы ролика. С помощью метода
flush можно сделать это немедленно:
v.flush();
Важно помнить, что разделяемые объекты, созданные в каком-либо фильме,
не могут использоваться другими фильмами, даже выполняющимися на
том же компьютере.
С помощью разделяемых объектов можно сохранять на компьютере пользователя счетчик посещений, личные настройки, информацию о пройденных уровнях игры и т.д. |
Для настройки компонентов используются параметры общедоступные свойства объектов. Их можно читать и изменять с помощью панели Parameters в нижней части экрана, а также из программы на ActionScript.
Компоненты хранятся в библиотеке в виде скомпилированных клипов (то есть, нельзя «заглянуть» внутрь и посмотреть, как они устроены). Их можно только перетащить из библиотеки на сцену и настроить свойства с помощью панели Parameters.
Внешний вид компонентов можно изменять, для этого используются так называемые темы или шкуры. Они представляют собой рисунки, хранящиеся в виде FLA-файлов в одной из папок внутри папки установки программы Flash, и могут быть изменены. Подробности можно найти в справочной системе и в литературе. |
Компоненты существенно упрощают создание интерфейса стандартного типа, но сильно увеличивают объем файла. Например, ролик, показанный в начале урока, занимает 140 Кб. Поэтому их используют тогда, когда размер файла не играет особой роли. В профессиональных роликах они встречаются достаточно редко.
Откройте файл PRACTICE\16\register.fla и изучите его. |
Создайте новые слои Компоненты, Программа и Метки. В слое Метки добавьте ключевые кадры в кадрах 10, 20 и 30. С помощью панели Properties дайте кадрам 1, 10 и 20 метки start, register и main. |
В слое Программа вставьте ключевые кадры с номерами 10 и 20. В кадр 1 добавьте команду
stop();
а в кадр 20 (начало основной части) загрузку внешнего ролика
loadMovieNum ( "cube.swf", 0 ); |
Параметр password для TextInput устанавливается в true, если нужно ввести пароль, вместо введенных символов будут отображаться звездочки.
У многострочного текста TextArea есть еще логические параметры
Закройте окно Actions (F9) и перейдите в кадр 1 слоя Компоненты. Откройте панель Components и из группы user Interface перетащите на поле два компонента TextInput для ввода имени и пароля. Первому из них присвойте имя name, а второму pass. |
Выделите поле pass, перейдите на панель Parameters и измените значение параметра password (пароль) на true. |
Добавьте кнопку (компонент Button) ниже полей ввода и присвойте ей имя enter и задайте ее параметру label значение Войти. |
Если присвоить параметру toggle значение true, кнопка ведет себя как кнопка с фиксацией, то есть после щелчке она остается в нажатом положении, а после повторного щелчка возвращается в «ненажатое». В этом случае параметр selected определяет начальное состояние кнопки.
компонент.setStyle ( параметр, значение );
В качестве параметров можно использовать, например,
Общие свойства всех компонентов можно установить с помощью метода setStyle глобального объекта style. Например строка
_global.style.setStyle("fontSize", 18);устанавливает размер шрифта 18 по умолчанию.
С помощью панели Properties увеличьте высоту всех элементов до 26 (выделяя их поочередно). Добавьте в кадр 1
слоя программы код
_global.style.setStyle("fontSize", 18); enter.setStyle("fontSize", 16);Проверьте работу клипа. |
Теперь добавим в нижнюю часть сцены текст с сообщением об ошибке, но сначала скроем его, изменив свойство _visible.
Добавьте в нижнюю часть сцены динамическую текстовую надпись (Dynamic Text)
"Невозможно войти в систему. Неверное имя или пароль.".
Присвойте надписи имя errInfo. Установите шрифт
Arial красного цвета, размер 18 пунктов.
На панели Properties выберите вариант Multiline
(многострочный текст). Добавьте к коду кадра 1 строчку
errInfo._visible = false;
|
Напомним, что все, что находится в блоке
<U>...</U>подчеркивается, а содержимое блока
<A HREF='xxx'>...</A>
становится ссылкой на документ с именем xxx.
Для того, чтобы перейти на нужный кадр внутри документ, мы используем специальный протокол asfunction:
<A HREF='asfunction:gotoAndStop,register'>...</A>Это означает, что после щелчка на этой метке выполняется команда
gotoAndStop ( "register" );
Заметим, что если бы мы работали со статическим текстом, можно было бы просто добавить текст
asfunction:gotoAndStop,registerв поле ссылки справа от значка на панели Properties. Однако такая ссылка не подчеркивается.
Создайте динамическое текстовое поле Регистрация. Настройте его шрифт, присвойте имя regText и разместите справа
от кнопки. Включите режим Render Text as HTML
(кнопка
на панели Properties). Добавьте к кадру 1 код
regText.htmlText = "<U><A HREF='asfunction:gotoAndStop,register'>"
+ "Регистрация</A></U>";
Проверьте работу ссылки.
|
В начале работы фильма создадим ссылку v на объект userBase. Написанная ниже функция findUser принимает имя пользователя как параметр и возвращает его номер в базе или -1, если он не найден (база еще не создана или пользователь не регистрировался).
Выделите кадр 1 слоя Программа и добавьте код
v = SharedObject.getLocal("userBase"); function findUser ( name ) { if ( v.data.base == undefined ) return -1; users = v.data.base; for(i=0; i<users.length; i++) if ( users[i].name == name ) return i; return -1; } |
Напишем еще одну функцию для проверки правильности ввода имени и пароля.
Добавьте к кадру 1 код функции function checkPass ( name, pass ) { var no = findUser(name); if ( no < 0 ) return false; return (v.data.base[no].pass == pass); } |
Теперь добавим код к кнопке Войти. Если пользователь не опознан, сообщение об ошибке (поле errInfo) становится видимым, иначе происходит переход к основной части фильма на метку main.
Выделите кнопку Войти и добавьте к ней код
on ( click ) { with ( _root ) { if ( ! checkPass(name.text, pass.text) ) errInfo._visible = true; else gotoAndStop("main"); } }Проверьте, появляется ли сообщение об ошибке. |
with ( _root ) { ... }который говорит о том, что все имена элементов и функций относятся к главному монтажному столу, а не к компоненту-кнопке.
Перейдите в кадр 10 слоя Компоненты и создайте там пустой ключевой кадр (F7). Добавьте на сцену два элемента TextInput из панели компоненты для ввода имени и пароля, назовите их nameNew и passNew (панель Properties). Увеличьте высоту этих элементов до 26. |
Для ввода дополнительных сведений (О себе) добавьте многострочное текстовое поле TextArea и дайте ему имя memo. |
Добавьте две радиокнопки для выбора пола, дайте им имена male (мужской) и female (женский). С помощью панели Parameters присвойте им нужные метки (Label), одну и ту же группу (параметр groupName), сделайте, чтобы элемент male был выбран по умолчанию (параметр selected равен true). |
С помощью кнопок и добавляются и удаляются элементы списка. Кнопки и перемещают выделенный элемент вниз и вверх соответственно. Щелкнув дважды на имени элемента, можно изменить его.
Добавьте компонент ComboBox (выпадающий список) для выбора года рождения. Дайте ему имя year, немного уменьшите ширину и установите высоту 26. На панели Parameters в массив labels добавьте свой год рождения, предыдущий и следующий. |
Под меткой Интересы добавьте 4 переключателя-флажка (CheckBox), дайте им имена int1, int2, int3 и int4, присвойте нужные метки (параметр Label). |
Добавьте кнопку Сохранить, установите ее по середине сцены, задайте высоту 26 и ширину 135. Присвойте кнопке имя save. |
Перейдите в кадр 10 слоя Программа и добавьте код для изменения формата элементов
male.setStyle("fontStyle", "italic"); female.setStyle("fontStyle", "italic"); year.setStyle("fontWeight", "bold"); for (i=1; i<=4; i++) { obj = _root["int"+i]; obj.setStyle("fontFamily", "Courier New"); obj.setStyle("color", 0xFF); obj.setStyle("fontWeight", "bold"); } |
Добавьте к коду кадра 1 функцию function addUser ( userData ) { if ( v.data.base == undefined ) v.data.base = new Array(); v.data.base.push ( userData ); v.flush(); } |
После щелчка по кнопке Сохранить происходит событие click. В его обработчике нужно проверить, введены ли имя и пароль. Если да, в новый объект записываются все данные, вызывается функция addUser и выполняется переход на метку start.
Выделите кнопку Сохранить и добавьте к ней обработчик
on ( click ) { if ( _root.nameNew.text == "" ) return; if ( _root.passNew.text == "" ) return; var userData = new Object(); with ( _root ) { userData.name = nameNew.text; userData.pass = passNew.text; userData.gender = male.selected; userData.info = memo.text; userData.born = year.selectedItem.label; userData.interest = Number(int1.selected) + Number(int2.selected)*10 + Number(int3.selected)*100 + Number(int4.selected)*1000; } _root.addUser ( userData ); _root.gotoAndStop("start"); }Проверьте работу фильма. |
Сделайте эти улучшения самостоятельно. |
Фактически в состав проектора включается не только Flash-ролик, но и проигрыватель, при этом объем файла значительно увеличивается, иногда до 2,5 Мб. Но это не страшно, если вы пишете программу (например, игру) для выполнения на локальном компьютере, а не через Интернет.
Проектор создается при публикации фильма через меню FilePublish. Предварительно нужно включить нужный режим в окне настройки FilePublish Settings.
Выберите пункт меню FilePublish Setting (настройки публикации), перейдите на вкладку Formats и отметьте флажок Windows Projector. Затем создайте проектор, выбрав пункт меню FilePublish (клавиши Shift+F12). Проверьте, как работает проектор, запустив его из Проводника. |
Простейший способ отладки это трассировка (вывод значений переменных в разных точках программы, где есть подозрение на ошибку). В среде Flash трассировка выполняется с помощью оператора trace и мы это уже использовали.
В более сложных случаях необходим отладчик специальная программа или программный модуль. Отладчик позволяет
Создайте новый документ и сохраните его в папке PRACTICE\16 под именем debug.fla.
Добавьте к кадру 1 код
_global.a = 99; a = 1; b = 2; y = 20; var s: String = "Ку-ку!"; |
Щелкните по значку в нижней части
панели Actions, чтобы закрепить код кадра 1.
Вставьте новый ключевой кадр в кадре 10 и
добавьте к нему код
function Sum ( a, c ) { var x = a + c; x = x + _root.a; x = x + _global.a; return x; } q = Sum ( b, y ); |
Внутри функции создается локальная переменная x, «видимая» только в этой функции, в нее сразу записывается сумма аргументов.
Далее к этой сумме прибавляются переменная a главного монтажного стола и глобальная переменная с тем же именем. Для обращения к ним нужно указывать соответственно _root и _global, иначе будет использовано значение локальной переменной a.
Вообще говоря, если существует несколько переменных с одним именем (как в примере), программа сначала ищет локальную переменную, затем (если не нашла) ищет переменную текущего клипа (this.a), а затем глобальную переменную.
Функция Sum вызывается в последней строке, в качестве параметров передаются значения b и y переменные клипа _root.
Перейдите к коду кадра 1, щелкнув по вкладке в нижней части панели Actions. Затем щелкните мышкой слева от номера строки 5 на синем фоне, чтобы там появилась красная точка. |
Мы только что установили точку прерывания (breakpoint), на которой должно остановиться выполнение программы при отладке. Отметим, что при нормальном запуске (по Ctrl+Enter, не в отладочном режиме) она никак не влияет на проигрывание фильма.
Точки прерывания, установленные в окне Actions, сохраняются внутри FLA-файла. Чтобы снять точку прерывания, нужно просто щелкнуть еще раз на красной точке.
Сохраните документ. Запустите отладочный режим для созданного файла. |
Щелкните по кнопке , чтобы начать выполнение фильма до первой точки прерывания. |
Слева в верхней части перечислены все присутствующие на сцене клипы:
Просмотрите свойства и переменные объектов _glocal и _level0. |
В правой части показан блок кода, где остановилась программа. Красная точка обозначает точку прерывания, а стрелка точку, где остановилась программа (эта строка еще не выполнялась). Сейчас стрелка совпала с точкой прерывания.
Вы, наверное, заметили, что переменной s нет в списке переменных, поскольку соответствующая строка кода еще не выполнялась.
В выпадающем списке можно выбрать блок кода, который нас интересует (сейчас выбран блок, связанный с кадром 1, Frame 1). Чтобы установить (или снять) точку прерывания, надо щелкнуть в поле слева от номера нужной строки. То же самое можно сделать, если щелкнуть по кнопке , курсор предварительно устанавливается в нужную строчку.
Точки прерывания, установленные в отладчике, не сохраняются внутри FLA-файла и будут потеряны, если закрыть его.
Кнопка снимает все точки прерывания, а кнопка прекращает отладку.
В выпадающем списке выберите код, связанный с кадром 10 (ищите фразу Frame 10) и поставьте точку прерывания на первой строке внутри функции Sum. Запустите фильм кнопкой . |
Посмотрите переменные на вкладке Locals (доступные внутри функции). Слово обозначает текущий клип, щелкнув по значку со знаком «плюс», вы увидите список переменных этого клипа. |
Для продолжения выполнения программы используются кнопки
«проскочить» эту строку, не выполняя ее; | |
выполнить одну строку (войти в функцию); | |
выполнить все строки до выхода из функции. |
Выполните одну строку с помощью кнопки и посмотрите, что изменилось на вкладке Locals (там должна появиться переменная x). |
Добавьте переменную x в окно Watch и сделайте вкладку Watch активной. Измените значение переменной x на 0. |
Выполните функцию до конца в шаговом режиме, нажимая на кнопку . Наблюдайте, как меняется значение x. |
Прекратите отладку, щелкнув по кнопке . |
Сначала нужно добавить на слайд элемент управления Shockwave Flash Object:
%windows%\system32\Macromed\FlashЭтот файл будет автоматически установлен и зарегистрирован (что важно!) при установке среды Adobe Flash или бесплатного проигрывателя Flash Player. В крайнем случае, можно скопировать его вручную с другого компьютера и зарегистрировать из командной строки
regsvr32 Flash.ocx
Во-вторых, сам Flash-ролик не внедряется в презентацию, а загружается во время ее выполнения. Поэтому лучше всего поместить его в ту папку, где расположена презентация, и не забывать «брать с собой» при копировании презентации.
При изменении размера объекта-контейнера на слайде размеры Flash-ролика изменяются так, чтобы помещался в отведенное место целиком без искажения пропорций.
Трехмерный мир | Приложение |
© 2007 К. Поляков