Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ActionScript 2.0 ЛР.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Функции

Функция — это блок кода, который можно использовать многократно (вызывать). Преимущество функций состоит в том, что

  • не нужно несколько раз писать одинаковый код, рискуя ошибиться при переписывании;

  • сокращается длина программы;

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

Функции объявляются с помощью слова function:

function qq() {

...

}

Имя этой функции — qq, при ее вызове qq(); выполняются все команды внутри фигурных скобок. Многоточие здесь и далее означает любой код на ActionScript.

Функция может принимать параметры или аргументы — дополнительные данные, которые влияют на ее работу. Параметры перечисляются через запятую в скобках:

function qq ( x ) { ... }

function ww ( x:Number, s:String ) { ... }

Функция qq принимает один параметр, его тип может быть любой. Функция ww принимает два параметра, причем их типы жестко заданы: первый — число, второй — символьная строка.

Функция может возвращать результат (число, строку, логическое значение и т.д.) с помощью оператора return. Например:

function Sum ( x, y ) {

var s = x + y;

return s; // или return x + y;

}

Чтобы использовать это значение, надо записать его в переменную:

w = Sum ( 2, 3 );

trace ( w );

Типы функций

Функции, так же, как и переменные, бывают трех типов:

  • функции временной шкалы (функции клипа), которые связаны с клипом и могут рассматриваться как его методы;

  • глобальные функции, которые можно использовать без указания адреса из любого места в программе;

  • локальные функции, которые объявляются внутри другой функции.

Чаще всего используют функции клипов. Например, если в одном из кадров главной временной шкалы объявлена функция

function qq () { ... }

с другой временной шкалы (из обработчика другого клипа) она вызывается как _root.qq().

Ту же функцию можно объявить по-другому:

qq = function() { ... }

При этом фактически создается переменная типа «ссылка на функцию» и в нее записывается адрес кода. Разница (в сравнении с первым способом) состоит в том, что в переменную qq можно потом записать адрес другой функции:

qq = function () { trace(1); }

qq();

qq = newFunc;

qq();

function newFunc () { trace ( 2 ); }

Если в первый раз при выполнении оператора qq() вызывается первая (безымянная) функция, то второй раз — функция newFunc. Заметим, что после присваивания qq=newFunc к первой функции уже никак не обратиться — ее адрес потерян.

Глобальные функции объявляются с помощью слова _global:

_global.qq = function ( x ) { ... }

Эту функцию можно вызывать просто как qq() из любого места программы, в том числе из обработчиков событий клипов.

Локальные функции объявляются внутри другой функции и известны только там. В примере

trace(b);

a();

function a() {

function b() {}

trace(b);

}

функция b — локальная для функции a, поэтому первый вызов trace(b) даст результат undefined (не определено), а второй (изнутри функции a) — [type Function], то есть, найдена функция с таким именем.

В созданном фильме остался еще один недостаток — программа позволяет перемещать рисунок больше, чем нужно, открывая фон за рисунком. Чтобы исправить положение, мы напишем функцию check, которая будет проверять допустимость координат _x и _y и возвращать рисунок в разрешенное состояние. Эту функцию можно связать с первым кадром слоя Кнопки.

Вспомним, что размер рисунка — 2000 на 400 пикселей, размер сцены — 550 на 400 пикселей, а диаметр круга-маски — 240 пикселей. Несложные расчеты показывают, что x-координата левого верхнего угла рисунка должна находиться в интервале от -1605 до 155, а его y-координата — в интервале от -80 до 80.

  1. Выделите первый кадр слоя Кнопки и добавьте к нему код

function check() {

if ( panorama._x < -1605 ) panorama._x = -1605;

if ( panorama._x > 155 ) panorama._x = 155;

if ( panorama._y < -80 ) panorama._y = -80;

if ( panorama._y > 80 ) panorama._y = 80;

}

  1. Теперь в конец каждого обработчика (для всех кнопок и клавиш) нужно добавить вызов функции check, например, так:

on (release){

panorama._x -= 50;

check();

}

Сделайте это, сохраните файл и проверьте его работу.

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

  1. Добавьте к кадру 1 слоя Кнопки такой код:

ear = new Object();

ear.onMouseWheel = function ( step ) {

panorama._x += 5*step;

check();

}

Mouse.addListener ( ear );

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

Теперь обсудим код. В строчке

ear = new Object();

в памяти строится новый объект с именем ear. Что это за объект — пока неясно, мы не определили ни его свойства, ни методы.

Далее определяется метод onMouseWheel (mouse — мышь, wheel — колесо). Это значит, что объект может реагировать на событие mouseWheel (прокрутка колеса мыши), если об этом ему кто-нибудь сообщит. Обработчик события — это функция, принимающая один параметр — число шагов прокрутки. Как и насколько переместить панораму — определяем мы в теле функции (можно было, например, сделать вертикальную прокрутку). После изменения координат идет проверка с помощью функции check.

Самая важная строчка:

Mouse.addListener ( ear );

Здесь сказано, что объект ear становится «слушателем» (listener) глобального объекта Mouse, то есть, будет получать информацию о всех событиях, происходящих с мышью. В частности, при прокрутке колесика происходит событие mouseWheel и будет вызвана написанная нами функция.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]