由于缺少更好的标题,我正在寻找检查此问题的最佳方法:

我有一个箭头对象。我还有一些我想对之进行冲突的对象,即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/

10-12 00:23
查看更多