Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Action Script.doc
Скачиваний:
18
Добавлен:
07.02.2015
Размер:
4.39 Mб
Скачать
        1. Задание 2

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

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

Переменные

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

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

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

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

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

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

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

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

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

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

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

x="ok";

Откомпилируйте ролик, нажав Ctrl-Enter. На экране будет лишь фон, однако в памяти возникнет переменная «x» имеющая значение «ok». В этом легко убедиться, нажавCtrlAltV, или в меню «Debug» выбрав «ListVariables». Появится окно «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в случае возникновения ошибки деления на ноль

Добавьте команду SetVariable: "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”.

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

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

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

Eval(“w”+x)=5

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

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