Особенности программирования кнопок — КиберПедия 

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Особенности программирования кнопок

2017-06-19 108
Особенности программирования кнопок 0.00 из 5.00 0 оценок
Заказать работу

Если Вы присвоили скрипт кадру, то он исполнится, когда данный кадр начнёт проигрываться. С кнопкой ситуация иная. Скрипт кнопки исполняется в ответ на событие, которое производит зритель ролика (щелчок мыши на кнопке, нажатие определённой клавиши и т. д.). Поэтому при программировании кнопок следует помнить, что любые команды AS, присвоенные кнопке должны лежать внутри «указателя события»

on (событие) {

Команды AS

}

Таких блоков может быть несколько и следовательно одна и та же кнопка может по разному реагировать на различные события. Для создания пустого блока в Normal Mode необходимо выбрать в списке команд «On Mouse Event» Отметим, что при программировании кадра или экземпляра «Movie Clip» данная команда недоступна. При выборе первой же команды для кнопки в Normal Mode для неё создаётся новый блок, так что формирование пустых блоков редко требуется. Откройте сохранённый ранее ролик «кнопки» и откройте скрипт экземпляра кнопки, запускающей анимацию. Хотелось бы предостеречь Вас от распространённой ошибки. Для того, что бы присвоить скрипт кнопке, необходимо ОДНИМ щелчком подсветить её и далее работать в редакторе скрипта. Некоторые новички делают двойной щелчок, попадая в редактирование кнопки, и пытаются присвоить скрипт кадру «Over» или «Down», надеясь, что он исполнится в момент наведения на кнопку, или щелчка. Это не так. Скрипты, присвоенные кадрам кнопки никогда не исполняются! Но вернёмся к событиям кнопки. Сейчас лучше переключиться в Normal Mode. Подсветите команду «on (release)».

В нижней части диалога Вы можете указать на какое именно действие пользователя должна реагировать кнопка. По умолчанию используется событие Release, те мышь вжата на кнопке и отпущена на кнопке. Скрипт, находящийся между фигурными скобками, исполняется в момент отпускания кнопки мыши. Снимите флажок напротив «Release» и установите напротив «Press». Убедитесь, что теперь ролик начнёт проигрываться в момент нажатия пользователем на кнопке левой кнопкой мыши. Устанавливая флажок в соответствующие положения, убедитесь, как срабатывают остальные события.

«Release Outside» Мышь вжата на кнопке и отпущена за её пределами

«Roll Over» Мышь не нажимали, она перешла на территорию кнопки

«Roll Out» Мыши не нажимали, она вышла за пределы кнопки.

«Drag Over» Мышь вжали на кнопке. Вывели за пределы кнопки, а потом не отпуская перевели обратно на кнопку. (Совершенно непонятно, где это можно использовать)

«Drag Out» Мышь вжали на кнопке и вывели за пределы кнопки

«Key Pressed» Нажата указанная в диалоге клавиша. Где мышь – не важно.

Кстати, а чем отличаются события «Release Outside» и «Drag Out»?

Проверим возможность использования нескольких блоков «On» в одной кнопке. Например, кнопка со скриптом, приведённым ниже будет проигрывать анимацию, лишь, когда на ней вжата левая кнопка мыши.

On (Press){

Play()

}

On (Release){

Stop()

}

Упражнение

Самостоятельно напишите скрипт, который будет проигрывать анимацию, лишь, когда мышь находится на территории кнопки.

Создание Flash-презентации.

Используя лишь команды Stop и Play можно создать массу полезных роликов. Например, презентацию. Пусть в презентации необходимо показать набор слайдов, сопровождающихся анимацией. Сменой слайдов должен управлять пользователь, нажимая на кнопку «далее» или «пробел». Общая схема подобного слайд-шоу довольно проста. Кстати, именно она используется в стандартных уроках «Help» «Lessons». Кнопка «далее» находится в отдельном слое в первом ключевом кадре. В остальные позиции данного слоя вставлены обычные кадры, так что кнопка доступна пользователю в течении всей презентации. На рисунке данный слой назван «Button Next». Сами слайды размещаются в слое «Presentation». Самостоятельно создайте на сцене анимацию «Motion Tween» или «Shape», используя ключевые кадры в позициях 1, 6, 11, 16, 21. В данном случае Используется анимация типа «Motion Tween» для перехода от слайда к слайду. Для того что бы исключить самопроизвольное проигрывание слайдов, ключевым кадрам присвойте команды «Stop()». Добавьте новый слой, создайте в нём экземпляр кнопки и присвойте ему скрипт

On (Release){

Play()

}

Разумеется, в реальной презентации для формирования эффектной анимации потребуется не один слой, но схема остаётся той же – кадры останавливают воспроизведение, а кнопка запускает.

Усложним нашу презентацию, добавив кнопки «в начало», «в конец» и «назад». Для этого познакомимся с новой командой – Goto. Данная команда служит для перехода между кадрами и сценами. (Переходы между сценами осилим позднее). В зависимости от того должно продолжаться воспроизведение после перехода или нет, команда выглядит GotoAndPlay(аргументы) или GotoAndStop(аргументы). В качестве аргумента может использоваться номер кадра или его метка. Метка представляет собой уникальное имя кадра которое может быть введено на панели «Frame» в поле «Label». Преимущество использования меток состоит в том, что при редактировании ролика, порядковый номер кадра может смениться, в то время как, его метка останется прежней.

Создайте ещё три экземпляра кнопок и поместите на них текстовые надписи «в начало» «В конц» и «назад». Пусть кнопка «в начало» переводит проигрывание в первый кадр по его номеру. Присвойте кнопке скрипт

on (release) {

gotoAndStop (1);

}

Кнопка «в конец» будет переводить в последний кадр по его метке. Подсветите последний кадр и на панели «Frame» присвойте ему метку «end». Если Вы в режиме Normal Mode, то в списке Type выберите Frame Label, а в списке Frame – имя метки. Хотя, куда проще, просто ввести имя в кавычках, находясь в Expert Mode.

on (release) {

gotoAndStop ("end");

}

Что касается кнопки назад, то так как номер кадра назначения не постоянен, его придётся вычислять. Так как слайды отстоят друг от друга на расстоянии в 5 кадров, то номер предыдущего кадра можно получить, вычтя 5 из номера текущего. Номер текущего кадра возвращает внутренняя переменная _currentframe. Таким образом скрипт кнопки должен выглядеть так

on (release) {

gotoandplay (_currentframe-5);

}

Для формирования скрипта в Normal Mode в списке Type выберите Expression.

Упражнение.

В полученном ролике есть недостатки. В первом кадре кнопка назад пытается перевести проигрывание на –4 кадр. Да и кнопка «в начало» тут ни к чему. То же относится и к последнему кадру. Используя дополнительные слои, исправьте ролик.

 

Переходы между сценами.

До сих пор мы работали лишь с одной сценой. В большей части создаваемых роликов каждый новый этап анимации являлся продолжением предыдущего. Даже если анимация имеет несёт новое содержание, могут использоваться те же фоновые рисунки или продолжать звучать тот же фоновый звук. Но иногда возникает необходимость включения в ролик совершенно не связанного с предыдущим фрагмента. В этом случае может быть удобнее использование нескольких сцен. Для создания новой сцены необходимо в меню «Insert» выбрать «Scene». Для быстрого перехода между сценами можно использовать кнопку в верхней правой части окна редактора. Имя текущей сцены отображается в верхней левой части редактора, например, Для управления сценами необходимо активизировать панель Scene.

Двойной щелчок по значку сцены позволит на неё перейти, а по имени – переименовать. Кнопки в нижней правой части панели необходимы для дублирования сцены, создания новой и удаления сцены. Для корректной работы скрипта не используйте в названиях сцен русские буквы. Обратите внимание, что сцены расположены в определённом порядке. Так они будут проигрываться по умолчанию. Однако, перетаскивая мышкой, вы можете изменить порядок их следования.

 

Продолжим усложнение нашей презентации. До сих пор в ней использовалась лишь анимация «Motion Tween». Создайте дополнительно две сцены. Первую назовите «fr» и создайте на ней произвольную покадровую анимацию, а другую назовите «sh» и создайте на ней анимацию формы. Вернитесь на первую сцену. Добавьте в слой с кнопками ещё две. Пусть первая будет запускать проигрывание сцены «fr». В этом случае функция gotoAndPlay должна иметь два аргумента – имя сцены и имя кадра на этой сцене.

on (release) {

gotoAndPlay ("fr", 1);

}

Для сцены «sh» поступим несколько иным способом. Активизируйте панель Scene и переместите значок «sh» так, что бы он следовал сразу за значком «Scene1». Таким образом «sh» будет для «Scene1» «следующей». Тогда оставшейся кнопке можно присвоить такой скрипт

on (release) {

nextScene ();

}

По сути, это та же команда gotoAndStop(). В режиме Normal Mode данный скрипт получается выбором «NextScene» в раскрывающемся списке «Scene». Обратите внимание, что после перехода на сцену анимация останавливается. Для того что бы проигрывание продолжилось, используйте gotoAndPlay ("sh", 1);

Для полноты картины добавьте последним кадрам анимации новых сцен скрипт, возвращающий на первую сцену gotoAndStop ("Scene 1", 1);

 

Предположим, что наша презентация предназначена не для публикации в интернет, а для исполнения на локальном компьютере, т.е. будет представлять собой прикладную программу, исполняющуюся под управлением ОС, а не в браузере. Это даёт нашей презентации гораздо больше возможностей. Например, презентация сможет запускать другие программы, открывать документы с жёсткого диска. Разумеется, такие возможности недоступны SWF файлу, который проигрывается в браузере. Для создания независимого приложения, необходимо в диалоге «File» «Publish Settings» активизировать

Тогда, после публикации «File» «Publish» или Shift – F12 в той же папке где хранится исходный FLA – файл, возникнет одноимённый файл с расширением EXE. Размер данного EXE файла больше чем у SWF, но зато он не требует для работы наличия проигрывателя flash, а исполняется как обычная прикладная программа. Только в таких программах будут исполняться команды группы Fscommand для автономного проигрывателя. По своей сути Fscommand применяется для передачи команд среде, в которой исполняется ролик. В данном случае ролик будет запущен непосредственно из операционной системы а потому станет возможен запуск других программ или команд операционной системы.

Создайте в слое с кнопками дополнительно 5 экземпляров кнопок. Пусть первая будет закрывать окно ролика. Откройте окно скрипта первой кнопки (правая кнопка мыши на экземпляре и команда «Actions») и в списке команд выберите fscommand. В нижнем раскрывающемся списке выберите «quit». Скрипт должен выглядеть так:

on (release) {

fscommand ("quit");

}

Для того что бы проверить работу ролика необходимо проигрывать именно EXE-файл. Для обновления уже существующего EXE-файла ещё раз проведите публикацию «File» «Publish» (Shift-F12) и запустите ролик с жёсткого диска (EXE файл имеют значок в виде ромбика ). Не забудьте, что в диалоге «File» «Publish Settings» должен быть активизирован «Windows Projector (.exe)» Можно, также использовать и команду предварительного просмотра «File» «Publish Preview» «Projector». Последнюю команду можно выполнять и не сохраняя файла на жёстком диске (на самом деле он редактор будет его сохранять во временной папке).

Обратите внимание, что кнопка не будет функционировать, если посмотреть ролик в виде SWF или HTML.

Аналогично настроим следующие две кнопки для переключения в полноэкранный режим и обратно. Выбрав fscommand, выберите в нижнем списке fullscreen(true/false). В поле Arguments автоматически возникнет true. Такая команда переведёт ролик в полноэкранный режим. Для другой кнопки смените true на false. (Если лень набивать, можно использовать 0 или 1).

Когда ролик проигрывается в оконном режиме, в верхней части находится меню, которое можно скрыть, используя аргумент «showmenu». Присвойте следующий скрипт кнопке

on (release) {

fscommand ("showmenu", "0");

}

и убедитесь, что меню исчезает после щелчка по ней.

Аргумент "allowscale" позволяет управлять масштабированием ролика при изменении размеров окна, в котором он проигрывается. По умолчанию масштабирование разрешено. Если, например, развернуть окно проигрывателя во весь экран, то все элементы ролика пропорционально увеличатся. Это не всегда приемлемо, например, если в ролике присутствуют растровые изображения, их качество при масштабировании снизится. Масштабирование можно запретить, используя команду

fscommand ("allowscale", "0")

Аргумент «exec» применяется для запуска программ. Присвойте кнопке скрипт

on (release){

fscommand ("exec","calc.exe");

}

После щелчка по ней действительно запустится калькулятор. При необходимости, запускаемой программе можно передать параметры. К сожалению, пробел будет интерпретирован неверно, а потому, лучше пользоваться символом табуляции который может быть обозначен как «\t». Если необходимо использование самого символа «\», то его просто нужно продублировать. Итак, если, например, требуется открыть в блокноте текстовый документ «joke.txt», т.е. исполнить строку «notepad d:\joke.txt», то достаточно присвоить кнопке следующий скрипт.

on (release){

fscommand ("exec","notepad\td:\\joke.txt");

}

Для запуска приложения по умолчанию, открывающего документ, можно использовать команду windows «start». Пусть, например, требуется открыть albom1.m3u - лист для проигрывания mp3 – файлов, лежащий в папке music.

fscommand ("exec", "start\tc:\\music\\albom1.m3u");
Ссылка на файл может быть и относительной. Если файл лежит в той же папке, что и ехе файл ролика, то можно указать лишь имя файла

fscommand ("exec", "start\talbom1.m3u");

 

Рассмотрим ещё одну, относительно простую команду, которая, в отличие от предыдущей, будет работать и в автономном плеере и в браузере. Это оператор загрузки страницы – getURL. У оператора может быть один аргумент – указанный в кавычках URL, который необходимо открыть. Если исполнение оператора произошло в браузере, то в том же окне, где проигрывался ролик будет открыта требуемая страница. Если ролик проигрывался в плеере, то браузер запустится автоматически.

on (release) {

getURL ("http://list.ru");

}

У данной команды может присутствовать аргумент «window», определяющий в каком окне открывать URL.

Get URL (“http://list.ru”, window="_self") откроет текущем окне указанный адрес,

Get URL ("http://list.ru", window="_blank") откроет его в новом окне

Параметр «_parent» приведёт к открытию адреса в родительском, по отношению к текущему фрейме, а «_top» - в фрейме самого высокого уровня иерархии.

Используя оператор, можно обратиться к функциям javascript, например

window.open ("1.swf", "full", "fullscreen=yes,,scrollbars=no") Откроет ролик в полноэкранном режиме. Использование данной функции в AS должно быть таким

getURL ("javascript:window.open(\"1.swf\",\"full\",\"fullscreen=yes,,scrollbars=no\")");

Данным оператором можно передать и целую последовательность команд javascript. Если, например, добавить void(0) то не будет пустого окна на заднем плане.

getURL ("javascript:window.open(\"1.swf\",\"full\",\"fullscreen=yes,,scrollbars=no\");void(0);");

Также, можно использовать getURL для почтовой ссылки

getURL("mailto:[email protected]?subject=это тема письма&body=это содержание письма")

или вызова через netmeeting. Если IP – адрес вызываемого компьютера, например, 195.19.44.34, то команда

getURL("callto:195.19.44.34") попытается установить с ним сеанс связи.

Упражнение

Нарисуйте на сцене изображение. Разделите его линией на части и не смещая их преобразуйте в кнопки не выделяя линии. Линии удалите. Кнопкам присвойте различные URL. При наведении мыши на разные части изображения должны возникать подсказки.

 

Как видите «не так страшен скрипт, как его малюют». Многие команды интуитивно понятны, например «Go to» переведёт проигрывание к указанному кадру, «Get Url» загрузит страницу с указанным адресом, однако для полноценного понимания предмета необходимо пройти две довольно абстрактные темы. Так что собирайтесь духом и вперёд!

Переменные

Если у Вас есть хотя бы небольшой опыт программирования, и понятие переменной Вам знакомо, пропустите пару абзацев.

С переменными имели дело даже те, кто никогда не программировал. Помните, в калькуляторе есть кнопка П+, которая заносит в память результат вычислений, что бы потом им можно было воспользоваться. Это и есть переменная, т е. Область памяти, хранящая какое–то значение.. Правда, так как в калькуляторе она всего одна, её и называют просто «память». Ролику во время работы приходится запоминать множество разных чисел или текстов. Для того что бы их не путать, каждой ячейке даётся уникальное имя. Представьте, что у Вас два калькулятора. На одном наклеена буква «X» а на другом «Y». В память калькулятора «X» занесено число 10, а в память калькулятора «Y» - 20.

Выражение «X+Y» будет означать «к числу, хранящемуся в X прибавить число, хранящееся в Y».

Во Flash новые переменные не требуется описывать. Они автоматически создаются при первом использовании оператора присвоения. Оператор присвоения записывается как

“имя переменной”=”значение переменной”. Например, запись x=10; создаёт переменную x, равную 10 (В области памяти с именем x хранится число 10)

Использовать присвоение в Normal Mode не очень удобно. Придётся выбрать в списке команд “set variable” и заполнить поля Variable и Value. Если флажок «Expression» в правой части окна редактора снят, то соответствующее выражение автоматически берётся в кавычки. Так что, если приходится много работать с переменными, то лучше переключиться в «Expert Mode»

Переменная создаётся в памяти командой

Set Variable: "имя_переменной" = значение_переменной например,

Set Variable: "x" = 10 - переменной с именем «x» присвоено значение 10

Имя переменной может состоять из латинских букв, не может начинаться с цифр *? пробела. Регистр не различается. Значение переменной может быть текстовой строкой – тогда оно записывается в кавычках, или выражением – без кавычек.

Начнём экспериментировать. Создайте новый ролик. Откройте редактор скрипта для кадра ролика. Переключившись в «Expert Mode», введите с клавиатуры

x="ok";

Откомпилируйте ролик, нажав Ctrl-Enter. На экране будет лишь фон, однако в памяти возникнет переменная «x» имеющая значение «ok». В этом легко убедиться, нажав Ctrl Alt V, или в меню «Debug» выбрав «List Variables». Появится окно «Output», содержащее список переменных, хранящийся в памяти.

Level #0:

Variable _level0.$version = "WIN 5,0,30,0"

Variable _level0.x = "ok"

 

_level0 или слой 0 не имеет никакого отношения к слоям рисования. Просто так назвали область памяти в которую попал наш ролик. Дело в том, что ролик, вообще говоря способен загружать и другие ролики как в тот же слой вместо себя так и в слои выше себя. Но так как мы пока не достигли таких высот в AS, попросту не будем обращать внимания на слои. Главное, что переменная «x» действительно равна «ok».

Значение текстового (строкового) типа записываются в кавычках “abc” “ура” “1+1” и представляют собой лишь набор символов, который необходимо «запомнить».

«Выражения» записываются без кавычек 5; 1+2; 3/7 и анализируются.

Продолжим эксперименты. Вернитесь в редактор скрипта первого кадра и добавьте ещё две команды

y="1+1";

z=1+1;

Обратите внимание, что переменной y присвоен текст, а переменной z – выражение.

Откомпилируйте и выведите список переменных. В окне «Output» появится:

Variable _level0.y = "1+1"

Variable _level0.z = "2"

Проверим, как поведёт себя Flash в случае возникновения ошибки деления на ноль

Добавьте команду Set Variable: "z" = 1/0

Тогда в окне Output появится Variable _level0.z = 1.#INF

Обратите внимание, что данная ошибка не привела к критическому результату, переменной z присвоилось специальное значение 1.#INF.

В выражениях, наряду с числами могут быть использованы и имена переменных, например, скрипт

x = 1

y = x+1

x = x+x

Даст на выходе Variable _level0.x = 2

Variable _level0.y = "2"

Упражнение

Пусть в переменной x хранится число кадров ролика - 200. К настоящему моменту, из интернет загружено на компьютер пользователя 40 –значение переменной y. Какой процент составляют загруженные кадры? Присвоить результат переменной z. Думаю, расчёт очевиден:

x = 200

y = 40

z = y/x*100

Между прочим Flash4 зачем – то сначала выполнял умножение, а потом делил, и для правильного расчёта приходилось брать y/x в скобки. Ну, это дело прошлое (а кто прошлое помянет …).

Для объединения текстовых строк можно использовать оператор «+». Допустим так же оператор «add». Например

x=”a” + ”b”;

y=”c” add “d”;

присвоит переменным «x» «y» значения «ab» и «cd» соответственно. При работе с оператором «+» важно понимать, что если хотя бы один из операндов является текстовым, то и результат так же будет текстовым, а «+» будет «склеивать» операнды, в частности

x=1+2+”3”;

присвоит x значение “123”. Во Flash4 если было возможно, автоматически происходило преобразование в выражение. Т.е. получалось бы x=6.

Для преобразования текстовой строки в выражение можно использовать функцию Number(“текстовая строка”).

x=1+2+Number(“3”)

Присвоит переменной х значение 6.

При невозможности преобразовать результат в выражение функция возвращает специальное значение

x=Number(“z”);

присвоит x значение 1.#QNAN. Интересно, что если данная переменная используется в последующих вычислениях, то её значение трактуется как текст «NAN», если выполняется объединение текстов. Самостоятельно проверьте.

при использовании Number, в качестве аргумента могут быть использованы и имена переменных. Разумеется, они должны быть записаны без кавычек.

x = "1";

y = 1+x;

z = 1+Number(x);

листинг переменных после исполнения скрипта будет выглядеть так

Level #0:

Variable _level0.$version = "WIN 5,0,30,0"

Variable _level0.x = "1"

Variable _level0.y = "11"

Variable _level0.z = 2

для преобразования число – текст следует использовать функцию string, например

y= string(1)+string(1); присвоит переменной y значение 11.

для остальных арифметических операторов не определены текстовые аналоги, поэтому преобразование типов происходит автоматически.

x = "2";

y = x*2;

y получит значение 4.

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

x = 1;

y = ++x

эквивалентен скрипту

x = 1;

x=x+1;

y = x

 

скрипт

x = 1;

y = x++;

эквивалентен скрипту

x = 1;

y = x+1;

аналогично используется и оператор –-.

Присвоение нескольких переменных теперь можно произвести в одной строке.

a = b = c = d = 1;

изменений значения одного оператора тоже можно написать более изящно.

присвоение с увеличением.

x += 15;

эквивалентно

x = x + 15;

аналогично действуют и остальные операторы

x /=2;

операторы сравнения == равенство > больше < меньше <= меньше или равно >= больше или равно. Например

x=2*2 == 4 присвоит x значение true.

Существуют также наборы логических и битовых операторов, однако они детально изучаются на второй части курса «программирование на AS»

Важным отличием AS от Javascript является поведение неопределённых переменных. Если попытаться использовать в выражении имя переменной, которую мы ранее не создавали, то она будет считаться как выражение равной нулю или игнорироваться, как текст. Рассмотрим скрипт.

x="a"+z+"b";

y=1+z;

Обратите внимание, что переменная z ранее не определялась. Листинг приведён ниже

Level #0:

Variable _level0.$version = "WIN 5,0,30,0"

Variable _level0.x = "ab"

Variable _level0.y = 1

Теперь – самое интересное! Имя переменной также может представлять собой выражение!

Будьте внимательнее. С этим практически все новички путаются.

Для того, что бы Flash рассматривал имя переменной как выражение, необходимо использовать функцию Eval(“выражение”)

Eval("a"+"b") = 123;

Создаст переменную с именем «ab» и присвоит её значение 123. Возможен, также синтаксис

set("a"+"b",123)

но на мой взгляд, менее нагляден.

В аргументе функции Eval так же могут использоваться имена переменных

x = "b";

Eval("a"+x) = 123;

Приведёт к точно такому же результату. аb=123;

А что будет если убрать первое слагаемое из аргумента Eval, т.е.

x = "b";

Eval(x) = 123;

Конечно b=123;

Итак, ещё раз. В первой строке создалась переменная с именем «x» и ей присвоилось значение «b». Во второй строке создалась переменная с именем НЕ “X” а с именем равным ЗНАЧЕНИЮ X т.е. “B”.

По сути, на человеческом языке последняя строка прозвучала бы так «проанализируй то, что в скобках и создай переменную с этим именем»

Практически любой сложный эффект не может обойтись без описанной конструкции. Предположим необходимо создать десяток переменных с именами w1 w2..w10. равных 5.

Тогда если исполнить 10 раз скрипт

Eval(“w”+x)=5

изменяя значение переменной x от 1 до 10, то задача будет легко решена.

Но всему своё время, а пока, маленькая контрольная

Упражнение

Разберитесь в действиях скрипта и объясните результаты

x = "y";

a=”2”;

Eval(x) = "z";

b=1;

Eval(z) = "x";

c=a+Number(b);

d=Number(a+b)

Eval(y) = x;

a=Number(“b”)

b=b+d;

 

Variable _level0.x = "y"

Variable _level0.a = 1.#QNAN

Variable _level0.y = "z"

Variable _level0.b = 22

Variable _level0.c = "21"

Variable _level0.d = 21

Variable _level0.z = "y"

Надеюсь, теперь работа с переменными у Вас трудностей не вызывает. Главное – повнимательнее следите за кавычками, и почаще вызывайте список переменных после компиляции.

Осталась ещё одна «абстрактная» тема – взаимодействие объектов.

Идентификация объектов

Как уже было показано выше, экземпляры «Movie Clip» занимают во Flash особое место, так как представляют собой, по сути, независимые ролики. Часто требуется их согласованные действия. Цель данного раздела – освоение идентификации роликов, что позволит им взаимодействовать.

Разработчики Flash ввели в пятой версии новую методику идентификации – точечный синтаксис. Однако, для совместимости с предыдущими версиями был оставлен и старый слэш – синтаксис. Несмотря на то, что новый синтаксис удобнее нам придётся изучить оба так как и в старом синтаксисе написано немало красивых роликов. Кстати, многие примеры (Help - Samples) зачем-то тоже написаны в нём. Начнём со слэш – синтаксиса.

В единственном кадре нового ролика нарисуйте автобус и преобразуйте его в экземпляр «Movie Clip» (F8). Активизируйте панель «Instance» и в поле «Instance Name» введите имя экземпляра, например «ikarus». Откомпилируйте ролик и нажмите комбинацию Ctrl L или в меню «Debug» выберите команду «List Objects». В окне «Output» появится список существующих объектов.

Level #0: Frame=1

Movie Clip: Frame=1 Target="_level0.ikarus"

Shape:

Ролик во время своей работы может запустить другой ролик, причём так, что они будут вместе исполняться в одном окне. Для того, что бы проигрыватель знал, какой ролик прорисовывать на переднем плане, были введены слои на уровне роликов. Эти слои имеют фиксированные имена _level0, _level1, … Ролик, расположенный на более высоком уровне отображается поверх остальных. В данном случае загружен только один ролик на уровень _level0. В первой строке нулевой уровень обозначен записью Level #0.

далее описан экземпляр клипа (_level0.ikarus), находящийся в ролике и содержащий простую графику (shape)

Вернитесь в редактор. Разместите внутри клипа «ikarus» экземпляр клипа «driver». Для этого сделайте на экземпляре «ikarus» двойной щелчой. Нарисуйте водителя (лучше сначала вне автобуса) и преобразуйте его в экземпляр (F8) «Movie Clip». Дайте экземпляру имя driver (панель «instance»). Вернитесь на основную сцену и создайте на ней экземпляр автомобиля с именем «bmw». Откомпилируйте ролик и выведите список объектов. Должно получиться

Lavel #0: Frame=1

Movie Clip: Frame=1 Target="_level0.ikarus"

Shape:

Movie Clip: Frame=1 Target="_level0.ikarus.driver"

Shape:

Movie Clip: Frame=1 Target="_level0.bmw"

Shape:

Из записи видно, что экземпляры «ikarus» и «bmw» лежат на основной сцене (в корне), а экземпляр «driver» принадлежит экземпляру «ikarus». Если бы мы не давали имена экземплярам вручную, они автоматически получили бы имена Instance1, Instance2,…

Теперь вернёмся к экспериментам с переменными

Войдите в диалог свойств кадра на основной линейке и создайте скрипт

x = 1

Перейдите в редактирование экземпляра ikarus и в кадре этого клипа создайте скрипт

x = 2

Возникает вопрос, а чему будет равен x?

Откомпилируйте ролик и выведите список переменных Ctrl Alt V

Level #0:

Variable _level0.$version = "WIN 5,0,30,0"

Variable _level0.x = 1

Movie Clip: Target="_level0.ikarus"

Variable _level0.ikarus.x = 2

Оказывается, переменные существуют в разных роликах и никак не взаимодействуют.

Строка _level0.x= 1 описывает переменную, созданную на основной линейке, а строка

_level0.ikarus.x = 2 – переменную в экземпляре ikarus. Самостоятельно создайте переменные x=3 в экземпляре driver и x=4 в экземпляре bmw.

Необходимо научиться изменять переменные одного ролика из другого. Самым простым способом является указание полного пути к переменной. Предположим, необходимо с помощью скрипта, находящегося в кадре основной линейки, создать переменную в ролике driver, который, в свою очередь, находится в ролике ikarus. В поле имени переменной необходимо указать путь к переменной, а потом через двоеточие - её имя

_level0/ikarus/driver:y = 5

Если все переменные находятся в одном ролике, т.е на уровне _level0, то имя уровня можно не указывать.

/ikarus/driver:y = 5

Тогда, что бы создать переменную на основной линейке из любого экземпляра, достаточно записать

/:y = 10

Поместите этот скрипт в кадр экземпляра driver и убедитесь в правильности утверждения.

Для указания пути к переменной можно использовать редактор целей, который вызывается кнопкой в нижней правой части окна редактора скрипта. Установив переключатели в нижней части окна в положение, как показано на рисунке, вы получаете возможность указать экземпляр мышкой и получить ссылку на него в поле «Target». После подтверждения кнопкой «ОК» ссылка на экземпляр окажется в редакторе. Справедливости ради, надо отметить, что данный диалог не очень то полезен, так как в сложном ролике экземпляры могут создаваться и исчезать во время проигрывания, так что, привыкайте лучше вводить ссылки вручную.

Другим способом указания переменной из другого ролика является использование относительной ссылки. Что бы лучше разобраться в относительных ссылках, вспомним славный фильм «Ирония судьбы или с лёгким паром». Помните адрес? Третья улица строителей дом 6 квартира 12. Абсолютной ссылкой в данном случае можно считать запись

Россия/Москва/Третья улица строителей/дом 6/квартира 12

Или, если предположить, что речь идёт лишь о нашей стране то

/Москва/Третья улица строителей/дом 6/квартира 12

Как видим, адрес указан однозначно. Однако, если вы в данный момент уже находитесь в Москве, то вас интересует лишь название улицы номер дома и квартиры.

Третья улица строителей/дом 6/квартира 12

Это и есть относительная ссылка. Обратите внимание на отсутствие слэш в начале. Это и означает, что отчёт ведётся от ткущего вашего положения. И если Вы окажетесь в каком либо городе, где так же найдётся Третья улица строителей дом 6 квартира 12 то эта ссылка также сработает, но укажет на совсем другое место.

Вернёмся к нашему примеру с автобусом. Пусть требуется скриптом, принадлежащим если кадру клипа «ikarus» создать в клипе «driver» переменную x=1. Использование абсолютной ссылки будет выглядеть так

/ikarus/driver:x=1;

«на сцене лежит клип «ikarus» в нём клип «driver» создай в нём переменную»

Но так как скрипт уже находится в клипе «ikarus» то достаточно записать

driver:x=1;

«в тебе находится клип «driver» создай в нём переменную»

Очень важно понимать разницу. Абсолютная ссылка сработает где бы не находилась. Относительная – лишь в в клипе «ikarus». Если её поместить в кадр клипа «bmw», то она будет проигнорирована, так как в клипе «bmw» нет клипа «driver». Если же его создать, то переменная возникнет именно в нём.

Относительная ссылка может указывать и на клипы, расположенные выше по иерархии.

В этом случае вообще никаких имён не требуется. Жильцы квартиры, указывая на свой дом, или свою улицу так и говорят «наш дом» «наша улица». В слэш синтаксисе такая запись будет выглядить как

../ на уровень выше

../../ на 2 уровня выше.

(сразу вспоминается команда DOS cd..)

итак, если в клипе «driver» находится скрипт

../:x=1;

../../:y=2;

то переменная x возникнет в клипе «ikarus», а переменная y – на основной линейке.

Относительная ссылка может быть и более сложной. Например такой скрипт

../../bmw:z=1

означает «поднимись на 2 уровня выше, найди там клип «bmw» и в нём создай переменную»

Упражнение

Создайте на сцене ещё один клип с именем «house». Присвойте кадру этого клипа скрипт, который на сцене, и в клипах «ikarus» «driver» «house» создаст по 2 переменные. Используйте для создания одной переменной абсолютную, а для создания другой – относительные ссылки.

Иногда возникает необходимость, что бы один клип обращается к другому несколько раз подряд, например создал сразу три переменных. Что бы не писать для каждой переменной ссылку на клип, предусмотрен оператор

«Tell Target(“ссылка на клип к которому идёт обращение”) {

Скрипт обращения к клипу

}».

Ссылка на клип в аргументе оператора может быть как абсолютной так и относительной. Только не забудьте взять её в кавычки, иначе компилятор решит что это имя переменной, содержащей в себе нужную ссылку. Рассмотрим пример. Пусть скрипт, принадлежащий кадру основной линейки создаст в клипе «ikarus» три переменные x1, x2 и x3. В стандартной записи, например с использованием относительной ссылки скрипт будет выглядить так

ikarus:x1=1;

ikarus:x2=1;

ikarus:x3=1;

Если использовать «Telltarget» то

Telltarget ("ikarus"){

x1=1;

x2=1;

x3=1;

}

Обратите внимание, что хотя переменные и создаются в другом клипе, пути к ним не указываются, как будто часть скрипта с присвоением переменных находится в клипе к которому направлено обращение.

Осталось рассмотреть один «подводный камешек». Пусть, например, необходимо переменной «b», хранящейся в клипе «bmw» присвоить значение переменной «a», хранящейся в клипе «ikarus».Для начала, создайте в клипе «ikarus» переменную «a». Перейдите в редактирование клипа «bmw» и создайте в нём скрипт

b = /ikarus:a

В данном случае ссылку на переменную b писать не надо, так как она возникает в клипе, которому принадлежит данный скрипт. Убедитесь в том, что переменная b действительно получила значение переменной a. Ту же самую процедуру можно реализовать при помощи оператора «Tell Target».

Telltarget ("/ikarus"){

/bmw:b = a

}

Отличие состоит в том, что в момент присваивания переменной мы, по сути, находимся уже внутри клипа «ikarus» где переменная «a» является «местной» и не требует указания пути, а переменная «b» является внешней. Если просто записать b=a то переменная возникнет в клипе «ikarus», так как указание шло именно ему.

Оператор «Tell Target» может быть использован не только для присвоения переменных, но и для других команд, обращающихся к другому клипу, например, команд «Stop()» или «Play()».

 

Telltarget ("/ikarus"){

Play();

}

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

Перед тем как углубиться в тонкости точечного синтаксиса, познакомимся с базовыми понятиями объектно-ориентированного программирования. Только не пугайтесь, пока ничего объектного программировать не будем. Просто дело в том, что точечный синтаксис как раз построен на этой идеологии, и потому, программисты с опытом ООП чувствуют себя в точечном синтаксисе как рыбы в воде. Нам лишь пока необходимо понимать что объект есть хранилище информации. Информация представляет собой как обычные данные (свойства) так и инструкции (методы). Ну, например, если считать объектом нашу группу Flash, то её свойствами будут – количество учащихся, номер текущего занятия, а методами – добавление нового ученика или выдача дипломов. В точечном синтаксисе это можно за


Поделиться с друзьями:

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.248 с.