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

标签 java collision-detection collision

我一直在通过尝试一个小“游戏”来学习 Java,该游戏开始时只是尝试让球跳起来。我有 3 个类(JumpingBall3、BallSprite3 和 Floor),并且已经实现了某种重力、持续有效的跳跃,以及对地板的撞击检测以阻止球无限下落。通过最后一点,我发现了 future 发展的一个潜在问题。现在我有两个由 JumpingBall3(“floor1”和“platform”)创建的楼层,我使用以下代码检测 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 , 包含在这篇文章中似乎有点冗长。

最佳答案

最简单的做法是将所有要检查的对象保存在一个Collection 中,例如一个List,然后遍历这个List

因此,例如,这里一个不错的选择是使用 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);
}

关于Java:检查矩形对多个对象的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39797062/

相关文章:

java - ButtonGroup空指针异常

python - 为迷宫墙壁添加碰撞

javascript - 如何使用 three.js 'wrap' 球体上的平面?

javascript - Javascript 中的碰撞处理——粒子卡住

java - 如何设计非EJB负载均衡应用程序?

java - QStackedWidget 相当于 Java Swing

java - 将 html 注入(inject) thymeleaf 模板

C++平面球体碰撞检测

swift - 防止具有相同 Catagorymask 的 Spritekit 节点发生碰撞

基于角度的 C++ SDL 碰撞