好的,我正在用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个平台,所以如果可能的话,第一种方式会更容易。 我也必须进行左碰撞检测。
答案 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();
}