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

Движение на плоскости Равномерное движение

В следующем примере мы научимся управлять машиной с помощью четырех клавиш-стрелок:

  • «вверх» — движение вперед;

  • «вниз» — движение назад;

  • «влево» — поворот влево на 5 градусов;

  • «вправо» — поворот вправо на 5 градусов.

Необходимо обеспечить заезд на свободное место на парковке. Перед проверкой ролика сначала щелкните по нему мышью. Каждый щелчок по фону возвращает машину в исходное положение. Управление движением машины должно осуществляться клавишами управления (со стрелками).

Движение на плоскости более сложно, чем одномерное, и требует некоторых математических знаний. Пусть машину надо передвинуть на расстояние L вперед (в соответствии с ее углом поворота _rotation, который на схеме ниже обозначен греческой буквой α).

По схеме видно, что x-координата машины увеличивается на Δx, а y-координата уменьшается на Δy (учитывая, что ось Y направлена вниз). Эти величины вычисляются с помощью функция синус и косинус (это методы объекта Math).

Единственная сложность состоит в том, что для методов Math.sin() и Math.cos() необходимо задать угол в радианах, а свойство _rotation определяет угол в градусах. Для перевода из градусов в радианы надо умножить величину угла на π (константа Math.PI) и разделить на 180.

  1. Скопируйте файл car_move.fla в свою папку.

  2. Добавьте обработчики событий машины

onClipEvent (load) {

L = 5;

function move ( d ) {

r = _rotation*Math.PI/180;

_x += d*Math.sin(r);

_y -= d*Math.cos(r);

}

}

onClipEvent (enterFrame){

if (Key.isDown(Key.UP)) move(L);

else

if (Key.isDown(Key.DOWN)) move(-L);

if (Key.isDown(Key.LEFT)) _rotation -= 5;

else

if (Key.isDown(Key.RIGHT)) _rotation += 5;

}

В обработчике enterFrame обрабатываются четыре клавиши-стрелки: при нажатии на клавиши «вверх» и «вниз» машина двигается вперед и назад, а клавиши «влево» и «вправо» разворачивают ее в нужном направлении.

  1. Самостоятельно сделайте так, чтобы щелчок мышкой по фону возвращал машину в исходное положение.

  2. Сохраните файл с именем ЛР4_2.fla.

Неравномерное движение

Теперь попробуем сделать так, чтобы скорость можно было изменять стрелками «вверх» (увеличивать) и «вниз» (уменьшать). Если вообще не нажимать клавиши, объект постепенно замедляет движение и в конце концов останавливается.

Именно так ведет себя самолет в следующем клипе. Если он улетит за границы поля, щелчок по фону вернет самолет в начальное положение.

  1. Скопируйте файл plane.fla из папки ЛР. Из библиотеки символов выберите символы map и plane. Разместите на рабочем столе. Выделите клип-самолет и добавьте к нему код

onClipEvent (load) {

v = 0;

function move ( d ) {

r = _rotation*Math.PI/180;

_x += d*Math.sin(r);

_y -= d*Math.cos(r);

}

}

onClipEvent (enterFrame){

if (Key.isDown(Key.UP)) v += 0.2;

else

if (Key.isDown(Key.DOWN)) v = Math.max(0,v - 0.3);

else v = Math.max(0,v - 0.1);

move ( v );

if (Key.isDown(Key.LEFT)) _rotation -= 5;

else

if (Key.isDown(Key.RIGHT)) _rotation += 5;

}

Этот код очень похож на код предыдущего примера. Переменная v обозначает скорость самолета, вначале она равна нулю. Если нажата клавиша «вверх», скорость увеличивается на 0.2, клавиша «вниз» уменьшает ее на 0.3, если ни одна клавиша не нажата, скорость уменьшается на 0.1.

Самолет не имеет заднего хода, поэтому для того, чтобы скорость не стала отрицательной, применяется метод Math.max(), выбирающий максимальное из двух значений в скобках.

  1. Самостоятельно измените размер и положение клипа-самолета, чтобы движение стало более реалистичным. Если самолет улетит за границы поля, щелчок по фону должен вернуть его в начальное положение.

  2. Сохраните файл с именем ЛР4_3.fla.

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