В момент, когда ракетка щелкает, мы деактивируем линии в памяти, которые описывают ракетку и делаем маленький трюк: мы используем клип клинообразной формы и выполняем функцию hitTest() между шаром и клином. Если hitTest() дает true, то мы рассчитываем реалистичную реакцию. Как вы знаете, если вы прочитали главу об обнаружении столкновений, hitTest() не является хорошим выбором во многих ситуациях. В данном случае он лишь остается приемлемым. (И как только у меня будет время, я создам независимую от кадров процедуру обнаружения столкновений шара с вращающейся линией.)
При создании левой и правой ракеток эта функция также создает ссылки на объекты линий, которые представляют каждую ракетку, leftFlipper и rightFlipper. Эти ссылки могут быть использованы другими функциями для чтения свойств ракетки (таких как угол) или изменения свойств ракетки, например в процессе выполнения поворота.
Помнить о недостатках
Пока вы узнали о двух слабостях в этой игре. Важно помнить о них, если вы пытаетесь сделать игру лучше.
Взаимодействие между двумя линиями, такими как стороны треугольника, вызывает странные краевые эффекты. Это может привести к тому, что шар будет делать вещи, которых вы не ожидаете, или не хотите.
В процессе поворота ракетки мы используем функцию hitTest(), совместно с клинообразным клипом, для обнаружения наличия столкновения.
initializeShot()
Эта функция вызывается в конце функции buildMap(), а также всякий раз, когда шар падает в ловушку. Она используется для активизации стартовой доски, инициализации некоторых переменных, и размещения пинбола над поршнем. Когда эта функция выполнена, пинбол готов к запуску.
1 function initializeShot(){
2 inPlay =true;
3 launchBank.enabled =true;
4 launchBank.counter =0;
5 rightWallOn =false;
6 shotYet =false;
7 ball.xmov =0;
8 ball.ymov =0;
9 ball.x =cradle._x;
10 ball.y =cradle._y-100;
11 ball.tempx =ball.x;
12 ball.tempy =ball.y;
13 shotPower =0;
14 shotMax =30;
15 }
В строке 2 мы устанавливаем inPlay в true