2014-04-01 103 views
0

對於缺乏更好的標題,我正在尋找最佳方法來檢查此:最快的方法來檢查每個實例只有一個?

我有一個箭頭對象。我也有我想爲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"))) 

此代碼的作品,但我很確定有一個更好的方法來做到這一點。抱歉含糊不清,這是一個很難說的問題。

+0

這是您的底層框架的一部分失敗;如果有什麼;如果它有效,那麼你可能會放棄它,除非它存在重大問題。 –

+0

@AnubianNoob我肯定會簡化這段代碼。 –

+0

@ user2005938你使用的是什麼版本的Java? –

回答

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; 
     } 
    } 
} 

我希望把這個作爲一個評論,但好,這是太大了。我可能是完全錯誤的,在這種情況下,請讓我知道,我會刪除我的答案:)

+0

+1雙支架初始化和最終使用 – Scott

+0

哈哈謝謝,實際上我會-1雙支架初始化,但嘿,我覺得有點懶!是的,我一般都會熟練使用'final'和'private'的東西:) – ccjmne

相關問題