В конце кадра, мы рисуем шар на экране и это выглядит, как если бы шар лишь слегка касался стены (как мы и хотим). Ведь в реальной жизни, шар не прошел бы сквозь границу стены.
Далее мы создаем функцию для рисования шаров в сцене.
1 function renderBalls(){
2 for (var i=1;i<=game.numBalls;++i){
3 var ob =game ["ball"+i ];
4 ob.xpos =ob.tempx;
5 ob.ypos =ob.tempy;
6 ob.clip._x =ob.xpos;
7 ob.clip._y =ob.ypos;
8 }
9 }
Эта функция просто устанавливает физическое положение каждого клипа, используя значения переменных координат объекта x и y, которые представлены как xpos и ypos.
Теперь (барабанный бой, пожалуйста) мы дошли до функции, которая обрабатывает собственно обнаружение столкновения. Это довольно большая функция, но она следует в точности той же логике обнаружения столкновений, которую мы обсуждали ранее.
1 function ballToBallDetection(b1,b2){
2 //инициализировать переменные скорости
3 var xmov1 =b1.xmov;
4 var ymov1 =b1.ymov;
5 var xmov2 =b2.xmov;
6 var ymov2 =b2.ymov;
7 //инициализировать переменные координат
8 var xl1 =b1.xpos;
9 var yl1 =b1.ypos;
10 var xl2 =b2.xpos;
11 var yl2 =b2.ypos;
12 //определить константы
13 var R =b1.radius+b2.radius;
14 var a =-2*xmov1*xmov2+xmov1*xmov1+xmov2*xmov2;
15 var b =-2*xl1*xmov2-2*xl2*xmov1+2*xl1*xmov1+2*xl2*xmov2;
16 var c =-2*xl1*xl2+xl1*xl1+xl2*xl2;
17 var d =-2*ymov1*ymov2+ymov1*ymov1+ymov2*ymov2;
18 var e =-2*yl1*ymov2-2*yl2*ymov1+2*yl1*ymov1+2*yl2*ymov2;
19 var f =-2*yl1*yl2+yl1*yl1+yl2*yl2;
20 var g =a+d;
21 var h =b+e;
22 var k =c+f-R*R;
23 //решить квадратное уравнение
24 var sqRoot =Math.sqrt(h*h-4*g*k);
25 var t1 =(-h+sqRoot)/(2*g);
26 var t2 =(-h-sqRoot)/(2*g);
27 if (t1>0 &&t1<=1){
28 var whatTime =t1;
29 var ballsCollided =true;
30 }
31 if (t2>0 &&t2<=1){
32 if (whatTime ==null ||t2<t1){
33 var whatTime =t2;
34 var ballsCollided =true;
35 }
36 }
37 if (ballsCollided){
38 //столкновение произошло, так что сделать сообщение
39 trace("Ouch!");
40 }
41 }
Сначала мы даем функции имя, ballToBallDetection, и устанавливаем два параметра, b1 и b2