English Version            Русская версия

 [ Разделы сервера ]  [ Карта сервера ]  [ Новости сервера ] [ Обратная связь ]



В конце кадра, мы рисуем шар на экране и это выглядит, как если бы шар лишь слегка касался стены (как мы и хотим). Ведь в реальной жизни, шар не прошел бы сквозь границу стены. Далее мы создаем функцию для рисования шаров в сцене. 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
Hosted by uCoz