УСКОРЕНИЕ И ТОРМОЖЕНИЕ
Любые объекты имеют массу и из состояния покоя переходят к равномерному поступательному движению не сразу. Не сразу они и останавливаются. Поэтому движение чаще выглядит как последовательность: ускорение - равномерное поступательное движение - торможение. Введем в наш пример новую переменную - 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 кадров. Это связано с тем, что средняя скорость в первой и третьей части в два раза меньше, чем во второй. |