Javascript 为什么我的画布动画会在加速时变慢?

Javascript 为什么我的画布动画会在加速时变慢?,javascript,canvas,Javascript,Canvas,我正在制作画布动画。这个想法是蓝色圆圈应该在每次点击时加速,但由于某些原因,在点击3或4次后,它会停止加速并减速。谁能帮我找出哪里出了错?我认为问题出在bClick函数中,因为其他一切都可以正常工作 var canvas=document.querySelector('canvas'); canvas.width=window.innerWidth; canvas.height=window.innerHeight; var c=canvas.getContext('2d'); //蓝色球的变

我正在制作画布动画。这个想法是蓝色圆圈应该在每次点击时加速,但由于某些原因,在点击3或4次后,它会停止加速并减速。谁能帮我找出哪里出了错?我认为问题出在bClick函数中,因为其他一切都可以正常工作

var canvas=document.querySelector('canvas');
canvas.width=window.innerWidth;
canvas.height=window.innerHeight;
var c=canvas.getContext('2d');
//蓝色球的变量
var bx=Math.random()*innerWidth;
var by=Math.random()*内部高度;
var bbdx=1.5;
var-bbdy=1.5;
var-bRadius=12;
//红球的变量
var rx=Math.random()*内部宽度;
var ry=Math.random()*内部高度;
var rrdx=1.5;
var-rrdy=1.5;
var rRadius=12;
//鼠标坐标对象
/*变量鼠标={
x:未定义,
y:未定义
}*/
函数bCircle(){
c、 beginPath();
c、 弧(bx,by,bRadius,0,Math.PI*2,假);
c、 strokeStyle=“白色”;
c、 笔划();
c、 fillStyle=“玉米花蓝”;
c、 填充();
c、 closePath();
//球反弹条件
}
函数rcille(){
c、 beginPath();
c、 弧(rx,ry,rRadius,0,数学PI*2,假);
c、 strokeStyle=“粉红色”;
c、 笔划();
c、 fillStyle=“红色”;
c、 填充();
c、 closePath();
//球反弹条件
}
//互动功能
函数bClick(e){
var mouseX=e.clientX;
var mouseY=e.clientY;
//跟踪蓝色圆圈上的点击
如果(mouseX-bx<50&&mouseX-bx>-50
&&mouseY-by<50&&mouseY-by>-50){
bbdx++;
bbdy++;
}
//跟踪红色圆圈上的点击
如果(mouseX-rx<50&&mouseX-rx>-50
&&mouseY-ry<50&&mouseY-ry>-50){
控制台日志(“坏”);
}
}
文档。添加的列表器(“单击”,b单击);
//事件监听器语法:element.addEventListener(事件、函数、useCapture);
函数绘图(){
c、 clearRect(0,0,innerWidth,innerHeight);
b圈();
rCircle();
//B循环条件
if(bx+bRadius>innerWidth | | bx-bRadius<0){
bbdx=-bbdx;
}
//有条件使球上下弹跳
if(by+bRadius>内高| | by-bRadius<0){
bbdy=-bbdy;
}
//将1连续添加到x以使其移动
bx+=bbdx;
//不断向y添加1,使其也上下移动
by+=bbdy;
//循环条件
如果(rx+rRadius>innerWidth | | rx-rRadius<0){
rrdx=-rrdx;
}
如果(ry+rRadius>内部高度| | ry-rRadius<0){
rrdy=-rrdy;
}
rx+=rrdx;
ry+=rrdy;
/*交互条件
如果(mouse.x-bbdx<50&&mouse.x-bbdx>-50
&&mouse.y-bbdy<50&&mouse.y-bbdy>-50){
rCircle();
}*/
//控制台日志(bx,by);
window.requestAnimationFrame(绘制);
}
draw()

球
帆布{
边框:1px纯黑;
}
身体{
保证金:0;
背景色:黑色;
}

更新您的单击功能。这是因为当你增加球时,如果你的球的速度为负,事实上你并没有使它变快,而是变慢,所以根据你应该增加或减少的符号,我将保留解,Math.sign在ie中不可用,所以你应该使用三元来增加或减少

函数b单击(e){
var mouseX=e.clientX;
var mouseY=e.clientY;
//跟踪蓝色圆圈上的点击
如果(mouseX-bx<50&&mouseX-bx>-50
&&mouseY-by<50&&mouseY-by>-50){
bbdx=(数学abs(bbdx)+1)*数学符号(bbdx);
bbdy=(数学abs(bbdy)+1)*数学符号(bbdy);
}
//跟踪红色圆圈上的点击
如果(mouseX-rx<50&&mouseX-rx>-50
&&mouseY-ry<50&&mouseY-ry>-50){
控制台日志(“坏”);
}
}

请注意,bbdx和bbdy可能是负值,因此使用++增加它们意味着减慢速度。试着用例如bbdx*=1.5来替换它

function bClick(e){
  var mouseX = e.clientX;
  var mouseY = e.clientY;
  //Tracking clicks on blue circle
  if(mouseX - bx < 50 && mouseX - bx > -50
  && mouseY - by < 50 && mouseY - by > -50){
   bbdx = (Math.abs(bbdx)+1)*Math.sign(bbdx);
   bbdy = (Math.abs(bbdy)+1)*Math.sign(bbdy);

  }
  //Tracking clicks on red circle
  if(mouseX - rx < 50 && mouseX - rx > -50
  && mouseY - ry < 50 && mouseY - ry > -50){
      console.log("bad");
  }
}