最快的方法是只检查每个实例中的一个?

时间:2014-04-01 00:31:56

标签: java

由于缺乏更好的头衔,我正在寻找最好的方法来检查:

我有一个箭头对象。我还有一些对象,我想对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")))

此代码有效,但我确信有更好的方法可以实现。抱歉有点模糊,这是一个难以陈述的问题。

1 个答案:

答案 0 :(得分:1)

假设您可以从对象本身访问对象的类型,您如何使用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;
        }
    }  
}

我想把它作为评论,但是,这太大了。我可能完全错了,在这种情况下,请告诉我,我会删除我的答案:)