Представьте себе, что мы здесь не используем независимое от кадров обнаружение столкновения. Это означает, что если вы возьмете эту свежеиспеченную игру и попытаетесь превратить ее в полноценную игру, в которой мяч движется быстрее, то вы можете столкнуться с типичными проблемами обнаружения столкновения типа «моментальный снимок». Так, если мяч движется достаточно быстро, он может пролететь прямо сквозь ракетку. Вы можете, если пожелаете, использовать скрипты обнаружения столкновения между мячом и линией, разработанные в предыдущих главах для каждой стенки ракеток. Это дало бы вам независимый от кадров теннис.
Теперь давайте посмотрим на другой пример: мяч падает под действием гравитации и отскакивает от пола. Откройте файл ball_floor.fla в папке Chapter06. В сцене вы видите экземпляры клипов ball_clip и floor_clip. Код ActionScript в этом файле создает объект под названием ball для хранения информации о ball_clip, установки временного положения мяча, проверки на столкновение с полом и рисование мяча на экране. Если скрипт определяет столкновение между мячом и полом, то мяч устанавливается в положение касания пола и его скорость меняет знак. Есть одна дополнительная деталь, добавленная в этот процесс, которая еще не рассматривалась: decay (затухание). В этом примере переменная с именем decay инициализируется значением 0.6. Ниже приводится код ActionScript для функции обнаружения столкновения.
1 function ballFloorDetection(){
2 if (ball.tempy+ball.radius>floorY){
3 ball.tempy =floorY-ball.radius;
4 ball.ymov *=-1*decay;
5 }
6 }
Если столкновение произошло, то скорость мяча меняет знак и умножается на переменную decay. Затухание (decay) является способом, чтобы обеспечить уменьшение высоты отскока мяча с каждым последующим отскоком; оно уменьшает значение скорости в процентах каждый раз, когда происходит столкновение. Все значения переменной decay находятся между 0 и 1. Например, в этом файле мы используем decay равным 0