Java-如果不是......如果有什么东西或东西?

时间:2013-11-17 16:30:30

标签: java if-statement collision operation

好的,我正在用Java制作这个新游戏。这可能是一个简单的问题,但任何人都可以帮我解决这个问题吗?

因此,如果“盖伊”与平台相撞,他就无法向右移动(显然)。

这就是我得到的:

if(Guy.x + Guy.width == (platform2.x ^ platform3.x)) {} else{
                    goRight();
}

“^”应该是“或”。 我有一个叫做goRight()的空白;

所以它就像“如果Guy的x加Guy的宽度与platform2或platform3的x相同然后向右走。我不想这样做:

if(Guy.x + Guy.width == platform2.x || Guy.x + Guy.width == platform3.x)) {} else{
            goRight();
}

而且,我还有20个平台,所以如果可能的话,第一种方式会更容易。 我也必须进行左碰撞检测。

4 个答案:

答案 0 :(得分:1)

你必须重复这些条件。

一个(更好)的解决方案是使用x变量创建一个集合,并在其上使用.contains()方法。这将使您的代码更具可读性。

或者,将所有平台放在一个集合中,循环遍历它并检查每个值的x变量。

答案 1 :(得分:0)

这就是语言设计的方式......所以对抗它是没用的。

您所能做的就是使用辅助变量来缩短表达式。但是你总是必须要像if(a == b || a == c)那样。

答案 2 :(得分:0)

如果Platform是一个具有x值的类,那么我建议将所有平台放入某种集合并迭代它。在循环内部,执行类似

的操作
for(Platform p: platforms){
     if(Guy.getX() + Guy.getWidth() == p.getX()){
        //whatever
     }else{
        goRight()
     }
}

答案 3 :(得分:0)

您需要一些更高级的结构来存储有关您的平台的信息。考虑使用平台的Set x坐标并执行“contains”

操作

例如:

Set<Integer> xcoords = new HashSet<Integer>();
xcoords.add(platform2.x);
xcoords.add(platform3.x);

if (xcoords.contains(Guy.x + Guy.width)){
} else {
    goRight();
}