我一直在通过尝试一些“游戏”来学习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);
}