Javascript “碰撞”;“小故障”;如果你愿意,在画布上

Javascript “碰撞”;“小故障”;如果你愿意,在画布上,javascript,html5-canvas,Javascript,Html5 Canvas,有一个圆弧可以检测底部对象的位置。这个弧线或球反弹良好,直到第二次反弹,并在地板上出现故障。变量ball.gSy控制球下落的速度。现在它被乘以10(ball.y+=10*ball.gSy;)来加速地板上的毛刺效果。另外,你可以用箭头键控制球,球确实会卡在侧壁上,但我特别好奇的是底部地板的问题 以下是一个JSFIDLE链接,可以更好地满足您的用户需求: 您的问题是您将球向下移动,但当发生碰撞时,您无法将球移回未卡在地板上的位置 因此,您正确地检测到碰撞,但您的球已经部分穿过墙,无法向上移动 以下是

有一个圆弧可以检测底部对象的位置。这个弧线或球反弹良好,直到第二次反弹,并在地板上出现故障。变量
ball.gSy
控制球下落的速度。现在它被乘以10(
ball.y+=10*ball.gSy;
)来加速地板上的毛刺效果。另外,你可以用箭头键控制球,球确实会卡在侧壁上,但我特别好奇的是底部地板的问题

以下是一个JSFIDLE链接,可以更好地满足您的用户需求:

您的问题是您将球向下移动,但当发生碰撞时,您无法将球移回未卡在地板上的位置

因此,您正确地检测到碰撞,但您的球已经部分穿过墙,无法向上移动

以下是您需要做的大致情况:

 ball.y += 10*ball.gSy;
 for(var i = 0; i < objects.length; i++){
                        if(ball.x > objects[i].x - ball.r &&
                          ball.y > objects[i].y - ball.r && 
                          ball.x < ball.r + objects[i].x + objects[i].w &&
                          ball.y < ball.r + objects[i].y + objects[i].h)
                      {
                            ball.gSy = (-1 * ball.gSy);
                            ball.y -= 10;// <--- important step
                            // You need to calculate how much to move the ball BACK up to where it has not quite hit the floor.   

                       }
ball.y+=10*ball.gSy;
对于(var i=0;iobjects[i].x-ball.r&&
ball.y>objects[i].y-ball.r&&
ball.xball.y-=10;//您的问题是您将球向下移动,但当发生碰撞时,您不会将球移回未卡在地板上的位置

因此,您正确地检测到碰撞,但您的球已经部分穿过墙,无法向上移动

以下是您需要做的大致情况:

 ball.y += 10*ball.gSy;
 for(var i = 0; i < objects.length; i++){
                        if(ball.x > objects[i].x - ball.r &&
                          ball.y > objects[i].y - ball.r && 
                          ball.x < ball.r + objects[i].x + objects[i].w &&
                          ball.y < ball.r + objects[i].y + objects[i].h)
                      {
                            ball.gSy = (-1 * ball.gSy);
                            ball.y -= 10;// <--- important step
                            // You need to calculate how much to move the ball BACK up to where it has not quite hit the floor.   

                       }
ball.y+=10*ball.gSy;
对于(var i=0;iobjects[i].x-ball.r&&
ball.y>objects[i].y-ball.r&&
ball.x