我一直在通过尝试一个小“游戏”来学习 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/