Java:检查多个对象之间的矩形碰撞

我一直在通过尝试一些“游戏”来学习Java,该游戏最初只是尝试跳球.我有3个类别(JumpingBall3,BallSprite3和& Floor),并且实现了某种程度的引力,始终如一的跳跃,并击中了地板以阻止球无限下降.最后一点,我发现了未来发展的潜在问题.现在,我有两个由JumpingBall3创建的楼层(“ floor1”和“平台”),并使用以下代码检测BallSpite3中的碰撞:

public boolean collision() 
{

    if (game.floor1.getBounds().intersects(getBounds()) || game.platform.getBounds().intersects(getBounds()))        {
        onFloor = true;
    }
    else 
    {
        onFloor = false;
    }

    return onFloor;
}

如果我要继续添加更多的地板或平台,则“如果”条件的长度很快就会失控.有没有一种方法可以创建一个在我的JumpingBall3类中创建的所有可见的Floor对象之间循环的方法?

我已经在网上here上发布了完整的代码,这篇文章中包含的内容似乎有点冗长.

解决方法:

最简单的操作是将要检查的所有对象保留在集合中,例如列表,然后遍历此列表.

因此,例如,这里的一个很好的选择是使用一个Floor集合,我们在其上反复检查是否与其中一个发生冲突.

public boolean collision() {
    boolean onFloor = false;
    Rectangle rectangle = getBounds();
    for (Floor floor : floors) {
        if (floor.getBounds().intersects(rectangle)) {
            onFloor = true;
            break;
        }
    }
    return onFloor;
}

假设您使用Java 8,则可以依靠Stream API进行与下一个相同的操作:

public boolean collision() {
    Rectangle rectangle = getBounds();
    return floors.stream().map(Floor::getBounds).anyMatch(rectangle::intersects);
}
上一篇:读书笔记--SQL必知必会06--用通配符进行过滤


下一篇:python – pygame精灵墙碰撞