(Java)在Breakout游戏

时间:2017-08-16 10:12:19

标签: java android vector collision-detection

所以我在android studio中制作突破性的游戏。

在制作游戏循环并与桨和砖进行基本碰撞之后,我注意到我的球在增加速度后开始穿过我的砖块和桨叶。

问题在于它在一帧中碰撞了两次,所以我的基本碰撞还不够。

我已经阅读了有关使用矢量数学解决方案的信息。但对我来说太过分了。 我指的是这个问题的答案: 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

提前致谢!

1 个答案:

答案 0 :(得分:0)

在每个循环中你应该记录球的先前位置。当你发现碰撞时,你应该立即将球移动到前一帧位置然后处理弹跳效果。它应该永远不会记录两次碰撞,这意味着你没有正确处理碰撞。如果你说当你提高速度时球似乎通过桨,你需要看看你如何计算速度或提高帧速率。你的FPS是什么?

您还可以看到我的答案herehere