- •Основы языка 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
- •Градиентная заливка
- •Квадраты
- •Двойной щелчок
- •Текстовое поле
Организация отскока объектов Одномерное движение
При наведении мыши на клип, расположенный ниже, мячик начинает скакать, постепенно останавливаясь. Щелчок мыши по полю возвращает его в начальное положение.
Когда мяч летит вниз (рисунок слева), сила тяжести G давит его вниз, а сила сопротивления воздуха Fc — подталкивает вверх, так как действует противоположно скорости v. При движении вверх (рисунок справа) обе силы действуют в одном направлении.
Будем считать скорость положительной, когда мяч летит вниз (его y-координата увеличивается). Тогда сила тяжести дает положительное ускорение (увеличение скорости), а сила сопротивления — отрицательное при полете вниз (когда v>0) и положительное при полете вверх (когда v<0).
Изменение скорости в программе на каждом небольшом интервале можно записать так:
v += g - mu * v * v / Math.abs(v);
Здесь g и mu — характеризуют ускорение свободного падения и сопротивление воздуха (строго говоря, mu зависит от скорости и формы объекта, но мы упрощаем дело, здесь эти тонкости не очень нужны).
Величина Math.abs(v) — это модуль скорости, поэтому отношение v/Math.abs(v) равно 1, если скорость положительна (вниз), и -1, если отрицательная. Такой прием позволяет учитывать движение в обоих направлениях.
Из-за сопротивления скорость изменяется на mu*v, то есть сила сопротивления линейно зависит от скорости.
На больших скоростях эта зависимость становится более сложной — квадратичной и даже кубичной (от квадрата или от куба скорости).
Единственная проблема — избежать деления на нуль при нулевой скорости (в самой высокой точке). Для этого применим условный оператор:
v += g;
if ( v != 0 ) v -= mu * v * v / Math.abs(v);
В момент отскока (когда мяч достигает предельного нижнего положения) направление вектора скорости скачком меняется на противоположное, при этом теряется часть энергии, т.е. скорость уменьшается по модулю. Отскок с потерей 5% скорости в программе можно записать так:
v = - 0.95*v;
Скопируйте файл ball.fla в свою папку. Выделите на сцене мяч (клип с именем ball) и добавьте к нему следующий код:
onClipEvent (load) {
v = 0;
g = 9.81;
mu = 0.02;
function bounce() {
v += g;
if (v != 0) v -= mu * v * v / Math.abs(v);
if (_y + v > 350) {
_y = 350;
v = -0.95 * v;
}
else _y += v;
}
}
onClipEvent (enterFrame) {
bounce();
}
При загрузке клипа (событие load) задается начальная скорость v, ускорение свободного падения g и коэффициент сопротивления mu. Кроме того, описывается функция bounce, в которой изменяется скорость и координата мяча. Предельная y-координата равна 350, при достижении этого уровня происходит отскок.
Функция bounce вызывается в обработчике события enterFrame, то есть (в нашем случае) 12 раз в секунду.
Если нужно перерисовывать мяч реже или чаще (вызывать функцию с другим интервалом), можно использовать таймер и функцию setInterval. Например, если добавить в конец обработчика load строчку
setInterval ( bounce, 100 );
функция bounce будет вызываться с интервалом 100 мс.
Если интервал меньше, чем интервал смены кадров, могут быть проблемы с перерисовкой объекта. Чтобы улучшить анимацию, надо добавить вызов
updateAfterEvent();
(перерисовать после события) в конец функции bounce.
Если интервал больше, чем интервал смены кадров, функция будет вызвана только при следующей смене кадра. Таким образом, не гарантируется, что интервал будет точно выдержан.
Самостоятельно сделайте так, чтобы тень при наборе высоты увеличивалась.
Сохраните файл с именем ЛР4_4.fla.
