ГРАВИТАЦИЯ
При планировании 2-х и 3-х мерного движения в пространстве, со времён Ньютона на всех действует закон всемирного тяготения :) и принято учитывать ускорение свободного падения. Однако знаменитую цифру 9.8 вы не увидите в наших расчётах. В очередной раз выясняется, что в программировании всё проще, чем в жизни. Если присмотреться к предыдущему примеру, то можно увидеть, что если в момент прохода мувиклипа точки point направить его в противоположном направлении, получится очень похоже на отскок от вертикального препятствия движущегося вдоль оси х объекта. Останется только развернуть полученный результат на 90 градусов и, в результате мы получим траекторию скачущего мяча. Замените код в нашем примере на:
onClipEvent (load) { // при загрузке мувиклипа
_x = 100; // задаём стартовую позицию по оси х
point = 300;// задаём точку отскока
accel = 1;// задаём ускорение
reduct = .98;// задаём затухание
}
onClipEvent (enterFrame) { // далее каждый кадр
_x+=2; // описываем траекторию по оси x (и это всё!!)
speed += accel;// увеличиваем значение скорости
y = _y + speed;// задаём вспомогательной переменной y значение следующей точки траектории без учета затуханиЯ
if (y>point) { // и проверЯем, не превышает значение переменной y значение точки отскока point и если (if) превышает,
speed = -speed; // то менЯем направление движениЯ на противоположное
_y = point;/ и устанавливаем мувиклип в точку отскока
} else { // иначе, если мувиклип не дошел до точки отскока,
_y = point - (point-y)*reduct; // рассчитываем значение новой точки траектории*
}
}
*Думаю, расчет новой точки траектории требует более подробного описания. Разберём выражение, в порядке его вычисления программой (далее разбор выражений будет производиться в том же порядке).
(point-y) - вычисляется расстояние между следующей точкой траектории без учета затухания y и точкой отскока point. Это значение не может быть отрицательным, поскольку данная часть кода не исполняется, если y>point
(point-y)*reduct - уменьшаем расстояние до точки отскока на два процента.
point - (point-y)*reduct; - вычисляем расстояние от начала системы координат.
Обратите внимание на простоту описания основной траектории _x+=2, добавляем ускорение, затухание, отскок и, как результат, вполне реалистичное движение.