jq手写碰撞小球

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jq手写碰撞小球相关的知识,希望对你有一定的参考价值。

  1 jQuery.fn.bump = function() {
  2     var ele = $(this);
  3     var eleW = ele.width();
  4     var eleH = ele.height();
  5     //运动的高度和宽度范围
  6     var W = $(window).width()-eleW;
  7     var H = $(window).height()-eleH;
  8     window.onresize = function () {
  9         W = $(window).width()-eleW;
 10         H = $(window).height()-eleH;
 11     }
 12     var tan_b = H / W;
 13     var tan = Math.random()*5;
 14     var v_h = 500;
 15     var s_h = 0;
 16     var t = 0,
 17         x = 0,
 18         y = 0;
 19     a = Math.floor(Math.random() * W);
 20     b = Math.floor(Math.random() * H);
 21     //建立一个方向的对象
 22     var der = {
 23         l: true,
 24         t: false,
 25         r: false,
 26         b: true
 27     };
 28     //first
 29     ele.css({
 30         ‘top‘: b,
 31         ‘left‘: a
 32     });
 33     function move() {
 34         //1
 35         if(!der.l && !der.t && der.r && der.b){
 36             if(a!=W){
 37                 var tanA = (H - b) / (W - a);
 38                 if(tanA < Math.abs(tan)) {
 39                     y = H;
 40                     x = (y-b) / tan + a;
 41                     der.l=false;der.t=true;der.r=true;der.b=false;
 42                 } else {
 43                     x = W;
 44                     y = (x-a) * tan + b;
 45                     der.l=true;der.t=false;der.r=false;der.b=true;
 46                 }
 47             } else {
 48                 X = a;
 49                 y = b;
 50                 der.l=true;der.t=false;der.r=false;der.b=true;
 51             }
 52         //2    
 53         } else if(!der.l && der.t && der.r && !der.b){
 54             if(a!=W){
 55                 var tanA = b / (W - a);
 56                 if(tanA < Math.abs(tan)) {
 57                     y = 0;
 58                     x = b / tan + a;
 59                     der.l=false;der.t=false;der.r=true;der.b=true;
 60                 } else {
 61                     x = W;
 62                     y = b - (x-a) * tan;
 63                     der.l=true;der.t=true;der.r=false;der.b=false;
 64                 }
 65             } else {
 66                 X = a;
 67                 y = b;
 68                 der.l=true;der.t=true;der.r=false;der.b=false;
 69             }    
 70         //3
 71         } else if(der.l && der.t && !der.r && !der.b){
 72             if(a!=0){
 73                 var tanA = b / a;
 74                 if(tanA < Math.abs(tan)) {
 75                     y = 0;
 76                     x = a - b / tan;
 77                     der.l=true;der.t=false;der.r=false;der.b=true;
 78                 } else {
 79                     x = 0;
 80                     y = b - a*tan;
 81                     der.l=false;der.t=true;der.r=true;der.b=false;
 82                 }
 83             } else {
 84                 x = 0;
 85                 y = b;
 86                 der.l=false;der.t=true;der.r=true;der.b=true;
 87             }    
 88         //4
 89         } else if(der.l && !der.t && !der.r && der.b){
 90             if(a!=0){
 91                 var tanA = (H - b) / a;
 92                 if(tanA < Math.abs(tan)) {
 93                     y = H;
 94                     x = a - (H - b)/tan;
 95                     der.l=true;der.t=true;der.r=false;der.b=false;
 96                 } else {
 97                     x = 0;
 98                     y = b + a*tan;
 99                     der.l=false;der.t=false;der.r=true;der.b=true;
100                 }
101             } else {
102                 x = 0;
103                 y = b;
104                 der.l=false;der.t=false;der.r=true;der.b=true;
105             }        
106         }
107         s_h =  Math.sqrt((x-a)*(x-a) + (y-b)*(y-b));
108         t = (s_h / v_h)*1000;
109         ele.animate({
110             ‘top‘: y,
111             ‘left‘: x
112         },t,‘linear‘,function(){
113             a = x;
114             b = y;
115             move();
116         });
117     }
118     move();
119 };

调用和html

技术分享

 

以上是关于jq手写碰撞小球的主要内容,如果未能解决你的问题,请参考以下文章

js实现小球的弹性碰撞。

HTML5 Canvas彩色小球碰撞运动特效

java实现小球碰撞反弹

Pygame碰撞检测

canvas实现动态小球碰撞

1-2018-3-2小球碰撞