由于缺少更好的标题,我正在寻找检查此问题的最佳方法:
我有一个箭头对象。我还有一些我想对之进行冲突的对象,即object1,object2,...,objectx,其中objectx是我要检查的最后一个对象。
在我使用的引擎的碰撞系统中,有一个x1对象和一个x2对象,它们可能因碰撞中的对象而异。例如,如果箭头击中了对象1到x,从一开始我就不知道箭头是x1还是x2,但是可以很容易地检查它。
我想编写一个if语句,如果一个对象是箭头,而另一个是我的许多对象之一,则为true。这是我到目前为止的内容:
if ((x1Type.equals("arrow") || x2Type.equals("arrow")) && ((x1Type.equals("object1") || x1Type.equals("object2") || x1Type.equals("object3") || ... || x1Type.equals("objectx")) ||
x2Type.equals("object1") || x2Type.equals("object2") || x2Type.equals("object3") || ... || x2Type.equals("objectx")))
这段代码有效,但是我很确定还有更好的方法。抱歉,我有点含糊,这是一个很难陈述的问题。
最佳答案
假设您可以从对象本身访问对象的类型,那么使用Collection
(通常是Set
)来检查碰撞对象是否应该受到箭头的影响,您对此有何看法?
我建议这样的事情:
public static final String TYPENAME_ARROW = "arrow";
public static final Set<String> impactedTypes = new HashSet<String>() {
{
add("object1");
add("object2");
add("object3");
add("objectx");
}
};
public static void collide(final Object x1, final Object x2) {
if (x1.getType().equals(ARROW_TYPE)) {
if (impactedTypes.contains(x2.getType())) {
// hit x2 with x1;
}
} else if (x2.getType().equals(ARROW_TYPE)) {
if (impactedTypes.contains(x1.getType())) {
// hit x1 with x2;
}
}
}
我想将此作为评论,但是,太大了。我可能完全错了,在这种情况下,请告诉我,我将删除我的答案:)
关于java - 检查每个实例之一的最快方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22774698/