球与砖(Arkanoid Game)弹跳时的问题



我正在建立一个像阿肯色菜一样的突破球游戏,当球与砖头碰撞时,我有一个很大的问题。当球在砖(Brickx,Brickx((Brickx,Brickx Bricklength((Bricky,Bricky((Brickx Bricklength,Bricky(的拐角处相撞时,它就会发生。

这是我的代码:

private void checkCollision() {
        for(Brick brick : l.getCurrentLevel().getAllBricks()) {
            double bx = b.getX();
            if(brick.isShot())
                continue;
            if(b.getBounds().intersects(brick.getBounds())) {
                if (
                    (b.getX() == brick.getX() || b.getX() == brick.getX() + brick.getLength())
                    && (b.getY() >= brick.getY()  && b.getY() <= brick.getY() + brick.getHeight())
                )
                    b.setDx(-b.getDx());

                else
                    b.setDy(-b.getDy());
                if(brick.isDestroyable()) {
                    brick.shot();
                    b.setVelocity(b.getVelocity()+0.05);
                }
                break;
            }
        }
    }

乍一看,看起来您的问题在这里:

(b.getX() == brick.getX() || b.getX() == brick.getX() + brick.getLength())

如果x通过(例如(每个刻度增加5个,则您可以从b.getX() < brick.getX()跳到b.getX() > brick.getX(),而无需达到平等条件。因此,当球进入砖块时,它会使该状况失败并跳到这一状况:

else
    b.setDy(-b.getDy());

因此,当您希望水平逆转时(也许也垂直(时,它会逆转垂直方向。

作为旁注,您可能需要习惯于在单线上使用{}牙套,即使不是严格必要的。它们将帮助您的代码看起来更干净,并避免在以后修改事物时引入错误。

相关内容

  • 没有找到相关文章

最新更新