
- •Основы языка ActionScript 2.0 Для чего нужен Actionscript?
- •События
- •Действия
- •Операторы
- •Ключевые слова
- •Фигурные скобки
- •Точка с запятой
- •Кавычки
- •Комментарии
- •Отступы и пробелы
- •Переменные Объявление
- •Видимость переменных
- •Присваивание
- •Объекты
- •Условные операторы
- •Цикл с переменной
- •Циклы с условием
- •Перечисление свойств
- •Управление циклом
- •Лабораторная работа №1 «Знакомство с ActionScript» Панель Actions
- •Инструменты работы с кодом
- •Управление проигрыванием. Кнопки Команды управления
- •Скопируйте файл ship.Fla из папки лр1 в свою папку и в дальнейшем работайте только с ним!
- •Реакции на события
- •Метки кадров
- •Адреса: дети, родители и корень
- •Абсолютные адреса
- •Относительные адреса
- •Индивидуальное задание
- •Лабораторная работа №2 «Свойства и события клипа»
- •Свойства
- •Типы объектов
- •Обработчики событий
- •Применение события клипа
- •Присутствие: onClipEvent (load)
- •Отсутствие: onClipEvent (unLoad)
- •Движущая сила: onClipEvent (enterFrame)
- •Перемещение: onClipEvent (mouseMove)
- •Применение методов как обработчиков событий
- •Свойства объектов
- •События клипа
- •События мыши
- •Перетаскивание
- •События клипа
- •Отличие кнопки от клипа
- •Обработка событий мыши и клавиатуры
- •Функции
- •Типы функций
- •Защита паролем
- •Индивидуальное задание
- •Лабораторная работа №3 «Использование объектов среды Flash» Глобальный объект Key
- •Самостоятельное задание
- •Работа с текстом (String, Selection) Объект String — строка
- •Объект Selection
- •Использование объекта Color
- •Массивы Основные понятия
- •Копирование
- •Многомерные массивы
- •Методы для работы с массивами
- •Работа с массивами
- •Дата и время Объект Date
- •Периодический вызов функции
- •Индивидуальное задание
- •Лабораторная работа № 4 «Организация одномерного движения объектов» Математические функции
- •Одномерное движение
- •Движение на плоскости Равномерное движение
- •Неравномерное движение
- •Организация отскока объектов Одномерное движение
- •Индивидуальное задание
- •Лабораторная работа № 5«Организация движения объектов по наклонной плоскости»
- •Векторы
- •Отскок от наклонной плоскости
- •Шарик в кольце
- •Маятник
- •Загрузка символа из библиотеки
- •Определение границ клипа
- •Точка и клип Вторая форма hitTest
- •Трассировка растровых рисунков
- •Точки вдоль границы
- •Сложная фигура и клип Два подхода
- •Цикл по всем дочерних объектов
- •Локальные и глобальные координаты
- •Обработка события для звука
- •Загрузка фильмов
- •Использование Переменных
- •Локальные переменные
- •Типы функций
- •Обработчики событий
- •Описание проекта
- •Загрузка Flash-фильмов
- •Работа с рисунками
- •Увеличение рисунка
- •Маски клипов
- •Звуковые файлы
- •Баннеры
- •Компоненты Обзор
- •Текстовые поля
- •Форматирование
- •Текст-ссылка
- •Работа с базой пользователей
- •Регистрация
- •Радиокнопки
- •Выпадающий список
- •Выключатели
- •Формат компонентов
- •Добавление пользователя
- •Индивидуальное задание
- •Лабораторная работа № 9 «Рисование из программы»
- •Отрезки
- •Заливки Одноцветная заливка
- •Добавление методов к MovieClip
- •Градиентная заливка
- •Квадраты
- •Двойной щелчок
- •Текстовое поле
Типы функций
Функции, так же, как и переменные, бывают трех типов:
функции временной шкалы (функции клипа), которые связаны с клипом и могут рассматриваться как его методы;
глобальные функции, которые можно использовать без указания адреса из любого места в программе;
локальные функции, которые объявляются внутри другой функции.
Чаще всего используют функции клипов. Например, если в одном из кадров главной временной шкалы объявлена функция
function qq () { ... }
с другой временной шкалы (из обработчика другого клипа) она вызывается как _root.qq().
Ту же функцию можно объявить по-другому:
qq = function() { ... }
При этом фактически создается переменная типа «ссылка на функцию» и в нее записывается адрес кода.
Глобальные функции объявляются с помощью слова _global:
_global.qq = function ( x ) { ... }
Эту функцию можно вызывать просто как qq() из любого места программы, в том числе из обработчиков событий клипов.
Локальные функции объявляются внутри другой функции и известны только там. В примере
trace(b);
a();
function a() {
function b() {}
trace(b);
}
функция b — локальная для функции a, поэтому первый вызов trace(b) даст результат undefined (не определено), а второй (изнутри функции a) — [type Function], то есть, найдена функция с таким именем.
Обработчики событий
Обработчики событий — это специальные методы кнопок и клипов. Например, вместо определения обработчика события on(release) можно записать адрес нужной функции в свойство onRelease кнопки или клипа.
Пусть на текущем монтажном столе есть кнопка с именем btn (имя кнопки задается в левой части на панели Properties). Разберем такой код:
btn.onRelease = function () {
trace("q");
btn.onRelease = second;
}
function second() {
trace("qq");
btn.onRelease = null;
}
Вначале обработчик события кнопки — это безымянная функция, которая выводит на экран букву q и, кроме этого, меняет обработчик события на адрес функции second.
При втором щелчке вызывается функция second, которая выводит две буквы q и уничтожает обработчик, записывая в него null. На последующие щелчки кнопка не будет реагировать.
Теперь займемся нашим начатым фильмом. Нужно учесть следующее:
клипы, загруженные с диска на уровни 1 2 и 3, нужно расположить точно в том месте, где находится синий экран телевизора;
переключатели каналов работают только тогда, когда включено питание;
при выключении телевизор запоминает канал, работавший в этот момент.
Таким образом, к объекту Телевизор (имя tv) нужно добавить свойства-переменные:
power — логическое значение, показывающее, включено ли напряжение;
channel — номер ключенного канала;
screenX и screenY — координаты левого верхнего угла экрана.
Учтем, что экран телевизора — это клип, имеющий имя screen (в левой части панели Properties).
Выделите клип-телевизор и добавьте к нему обработчик
onClipEvent ( load ) {
power = false;
channel = 1;
var p = new Object();
p.x = screen._x;
p.y = screen._y;
localToGlobal ( p );
screenX = p.x;
screenY = p.y;
}
В самом начале питание отключено и установлен первый канал. Для размещения новых клипов на экране нужны его глобальные координаты (относительно всего окна, а не клипа-телевизора). Для использования функции localToGlobal создается новый объект p, к нему добавляются свойства x и y, равные локальным координатам экрана.
Теперь создадим обработчик кнопки включения питания.
Откройте клип-пульт в режиме редактирования, выделите кнопку питания и добавьте обработчик события
on (release) {
power();
}
Здесь вызывается функция power, которую мы сделаем глобальной и разместим в кадре 1 главной временной шкалы.
_global.power = function () { tv.power = ! tv.power; if ( tv.power ) { tv.lamp.gotoAndStop("on"); channel ( tv.channel ); } else { tv.lamp.gotoAndStop("off"); obj = eval("_level" + tv.channel); obj._visible = false; } } |
|
Во-первых, эта функция меняет значение переменной tv.power (это переменная power клипа tv) на обратное. Если питание включается, включается и лампочка, имеющая имя lamp внутри клипа tv, она переходит на кадр с меткой on. Функция channel (пока еще не написанная) включает канал, номер которого хранится в переменной channel того же клипа tv.
При выключении питания лампочка гаснет (переходит на метку off). Затем выключается (делается невидимым) ролик включенного канала. Для получения ссылки на нужный клип используется функция eval. Если значение tv.channel равно 1, то строчка
obj = eval("_level" + tv.channel);
запишет в переменную obj адрес _level1.
Теперь определим функцию для включения нужного канала.
Добавьте в код кадра 1 еще одну глобальную функцию
_global.channel = function ( no ) {
if ( ! tv.power ) return;
if ( no < 1 ) no = MAX;
if ( no > MAX ) no = 1;
for ( var i=1; i<=MAX; i++ ) {
obj = eval("_level" + i);
if ( i == no ) {
obj._visible = true;
obj._x = tv.screenX;
obj._y = tv.screenY;
} else obj._visible = false;
}
tv.channel = no;
}
Сначала идет проверка исходных данных. Если питание не включено, ничего не происходит, потому что оператор return заканчивает выполнение функции.
Если задан номер канала меньше 1, включается последний канал с номером MAX. Если номер канала больше MAX, включается первый канал.
Далее в цикле перебираем все загруженные клипы. Для нужного клипа включаем видимость и устанавливаем координаты, равные абсолютным координатам экрана телевизора. Все остальные клипы выключаем (_visible=false).
В конце функции номер включенного канала записывается в переменную channel клипа tv.
Остается добавить обработчики для кнопок пульта.
on ( release ) { channel ( 1 ); }
on (release) { channel( _root.tv.channel + 1 ); } Аналогично составьте обработчики остальных кнопок. Сохраните файл c именем ЛР7_1.fla и проверьте работу фильма. |
Обратите внимание, что в обработчиках кнопок-стрелок не проверяется допустимость нового номера канала — этим занимается функция channel.