- •Основы языка 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
- •Градиентная заливка
- •Квадраты
- •Двойной щелчок
- •Текстовое поле
Шарик в кольце
Мы построим пример, в котором шарик будет летать внутри кольца
Скопируйте файл skew.fla. Поместите клип Шар из библиотеки на сцену в любое место внутри кольца.
Выделите шар, и добавьте к нему код, который «двигает» объект по экрану:
onClipEvent(load){
v = 5;
rBall = _width / 2;
angle = random(360) * Math.PI / 180;
vx = v*Math.sin(angle);
vy = -v*Math.cos(angle);
function fly() {
_x += vx;
_y += vy;
}
setInterval ( fly, 20 );
}
Проверьте работу клипа.
Этот код практически совпадает с предыдущим примером, направление движения шарика выбирается случайным образом. Однако шарик пока не отталкивается от стенок кольца.
Раньше мы рассматривали отскок точки, а шарик имеет ненулевые размеры. Тем не менее, отскок шарика от поверхности можно рассмотреть как отскок его центра от некоторой окружности, радиус которой меньше, чем внутренний радиус кольца, на величину радиуса шарика.
Более того, отскок от кольца — это то же самое, что и отскок от плоскости, имеюшей ту же нормаль — вектор n. Поэтому для решения задачи можно напрямую использовать полученные выше формулы, основанные на применении векторов.
Вычислим радиус окружности, которая ограничивает движение центра шарика (на рисунке он обозначен через R). Если открыть клип Шар в режиме редактирования, легко проверить, что внешний радиус кольца равен 150, а его внутренний радиус — 95% от внешнего (см. свойство Inner radius), то есть 142,5. Кроме того, их этого числа нужно вычесть радиус шарика, который в программе определяется автоматически и записывается в переменную rBall.
Добавьте перед функцией fly строчки
xc = 200;
yc = 200;
R = 142.5 - rBall;
Здесь через xc и yc обозначаются координаты центра кольца.
Теперь остается написать код, который моделирует упругое отталкивание шарика от стенок. Мы расположим его внутри функции fly, он срабатывает тогда, когда расстояние между центром кольца и центром клипа-шарика становится меньше R.
Добавьте в конец функции fly код
var dx = _x - xc;
var dy = _y - yc;
var dist = Math.sqrt(dx*dx + dy*dy);
if ( dist >= R ) {
n1x = dx / dist;
n1y = dy / dist;
vn = vx*n1x + vy*n1y;
vx -= 2*vn*n1x;
vy -= 2*vn*n1y;
updateAfterEvent();
}
Сохраните файл и посмотрите, как работает клип.
Рассмотрим код более подробно. Сначала определяются смещения шарика относительно центра по осям X и Y, а также расстояние до центра:
var dx = _x - xc;
var dy = _y - yc;
var dist = Math.sqrt(dx*dx + dy*dy);
Если это расстояние меньше или равно R, произошло столкновение. Вектор нормали (перпендикулярный к плоскости отскока) всегда направлен к центру кольца и имеет координаты (dx,dy). Если разделить их на dist, получается единичный вектор того же направления с координатами
n1x = dx / dist;
n1y = dy / dist;
Далее вычисляем скалярное произведение вектора скорости и вектора n1, которое равно проекции скорости на нормаль:
vn = vx*n1x + vy*n1y;
и изменяем компоненты вектора скорости в соответствии с формулой предыдущего пункта
vx -= 2*vn*n1x;
vy -= 2*vn*n1y;
Коэффициент 2 говорит о том, что соударение абсолютно упругое.
Вызов функции updateAfterEvent заставляет программу сразу же перерисовать шарик в новом положении.
Если внимательно присмотреться, шарик в момент соударения «заходит» на кольцо. Действительно, это следует из условия dist>=R. Чтобы исправить этот недочет, нужно «вернуть» шарик назад так, чтобы его центр находился точно на окружности. Попробуйте разобраться в следующем коде самостоятельно.
Добавьте в начало тела условного оператора (внутри фигурных скобок) код
var k = (dist - R) / R;
_x -= dx*k;
_y -= dy*k;
Сохраните фильм с именем ЛР5_1.fla
