УСКОРЕНИЕ И ТОРМОЖЕНИЕ

 

Любые объекты имеют массу и из состояния покоя переходят к равномерному поступательному движению не сразу. Не сразу они и останавливаются. Поэтому движение чаще выглядит как последовательность: ускорение - равномерное поступательное движение - торможение. Введем в наш пример новую переменную - accel (от английского accelerator - ускоритель). Эта переменная будет отвечать одновременно за ускорение и торможение, поскольку торможение, не что иное, как ускорение со знаком минус. Также для ориентации в пространстве введём две константы - высоту и ширину нашего Movie - MovieWidth и MovieHeight. Условно разобьем пространство нашего Movie по ширине на три части, (A-B, B-C, C-D) в которых ускорение будет равным 1, 0 и -1 соответственно. Заменим код в нашем примере на следующий:

 

onClipEvent (load) { // При загрузке клипа

MovieWidth = 600; // задаём значениЯ константам, определЯющим ширину и

MovieHeight = 400;// высоту

_y = MovieHeight/2; // помещаем мувиклип по вертикали по центру

_x = 0; // а по горизонтали - слева

speed = 0; // задаём начальную скорость (в данном случае необЯзательно)

accel = 0; // задаём начальное ускорение (в данном случае необЯзательно)

A = 0; // задаём константы - ключевые точки траектории (эта необЯзательна)

B = 200; // эта точка определЯет границу между первой и второй частью

C = 400; // эта точка определЯет границу между второй и третьей частью

D = 600; // эта точка определЯет конец третьей части

}

onClipEvent (enterFrame) { // затем каждый кадр

if (_x <B) { // проверЯем, где относительно точки B находитсЯ мувиклип, если левее,

Accel = 1; // то ускорение будет равнЯтьсЯ единице,

} else if (_x <C) { // если правее точки B, проверЯем, где относительно точки C находитсЯ мувиклип, если левее,

Accel = 0; // то ускорение будет равнЯтьсЯ нулю

} else if (_x >C) { // если правее точки C

Accel = -1; // то ускорение будет равнЯтьсЯ минус единице

}

speed = speed + accel; // определив в предыдущих строках значение ускорениЯ, изменЯем значение скорости на значение ускорениЯ

_x=_x+speed;// и, наконец, знаЯ значение скорости, изменЯем позицию мувиклипа на значение скорости.

trace (speed); // выводим в окно Output значение скорости

}

Протестируйте (Ctrl+Enter). Перед тестированием закройте или очистите окно Output. Наш мувиклип доехал до края и поехал в обратную сторону, почему это произошло? Потому что движение со знаком минус, тоже движение, но только в обратную сторону :). Как изменялась скорость во время движения объекта Вы увидите в окне Output. В первой части (A-B), где ускорение равнялось единице, скорость вначале приобрела значение 1 и последовательно увеличивалась до 20ти. Затем, во второй части (B-C), где ускорение равнялось нулю, скорость оставалась постоянной и равнялась 20ти. И в третьей части (C-D) с 20ти скорость уменьшалась, и у границы Movie (точка D) равнялась нулю, но поскольку ускорение продолжало оставаться отрицательным, скорость приобрела отрицательное значение, и шарик поехал в обратную сторону.

* Внимательный читатель обратит внимание на то, что по данным окна Output шарик проходит расстояние от точки A к B и от C к D на протяжении 20ти кадров, в то время как расстояние от B к C он преодолевает всего за 10 кадров. Это связано с тем, что средняя скорость в первой и третьей части в два раза меньше, чем во второй.
Hosted by uCoz