1
所以我在android studio中做了一个突破游戏。(Java)在突破游戏中使用矢量碰撞
在制作了一个游戏循环和与桨和砖的基本碰撞后,我注意到我的球已经开始通过我的砖和桨在增加速度后进行剪辑。
问题在于它在一帧中碰撞了两次,所以我的基本碰撞是不够的。
我读过关于使用矢量数学解决方案。但是对我来说这太过分了,因此我的头也围绕着它。 我指的是这个问题的答案: Refer Here
if (RectF.intersects(bricks[i].getRect(), ball.getRect())) {
Brick brick = bricks[i];
if(ball.getRect().centerX()>brick.minX() && ball.getRect().centerX() < brick.maxX()){
ball.reverseYVelocity();
if(ball.getRect().top > brick.getRect().centerY()){
ball.clearObstacleY(brick.getRect().bottom - ball.getRect().height());
} else {
ball.clearObstacleY(brick.getRect().top + ball.getRect().height());
}
} else {
ball.reverseXVelocity();
if(ball.getRect().left > brick.getRect().centerX()){
ball.clearObstacleX(brick.getRect().right + ball.getRect().width());
} else {
ball.clearObstacleX(brick.getRect().left - ball.getRect().width());
}
}
而且我的球更新:
public void update(long fps, float speed){
rect.left = rect.left + (xVelocity*speed/fps);
rect.top = rect.top + (yVelocity*speed/fps);
rect.right = rect.left + ballWidth;
rect.bottom = rect.top - ballHeight;
}
那么我将如何改变这个弄成这个样子: Demo
提前致谢!
我的FPS设定为60 但我认为解决的办法是,如果我的下一个球的位置拦截任何块或桨看到,如果不将其设置为最接近的墙壁并反转速度。 – MrPako
不正确!如上所述,当您检测到碰撞时,您应该在碰撞发生之前将球的位置设置到先前的位置,然后您可以反转所有不考虑偏转角度的速度。所以你需要存储每个循环的前一帧位置 – Rob85
嗯。但是如果球的位置非常远并且球非常快,那么它可能会错过碰撞。实际上,我终于弄明白了,在我把所有的东西都工作后,我会发布我的答案:D – MrPako