2012-03-19 73 views
2

我試着喜歡了,如果拖曳對象 - 由Kinec記錄觸及與否。爲此,我定義了各種形狀(handArea)和(DangerArea)。對於碰撞檢測我寫了以下代碼:載有()在Visual Studio中不起作用

private bool checkAreaViolation(List<MCvBox2D> DangerAreas, List<MCvBox2D> HandAreas) 
{ 
    int zaehler; 
    int ZaehlerDA; 
    int Test; 
    String TestS; 
    Test = 0; 
    ZaehlerDA= 0; 
    foreach (MCvBox2D DangerBox in DangerAreas) 
    { 
     zaehler = 0; 
     ZaehlerDA++; 
     foreach (MCvBox2D HandBox in HandAreas) 
     { 
      if(zaehler<=HandAreas.Count-1) 
       if (DangerAreas.Contains(HandAreas[zaehler])==true) 
        return true; 

      PointF[] handVertices = HandBox.GetVertices(); 
      for (int i = 0; i < handVertices.Length; i++) 
      { 
       if (PointInPolygon(handVertices[i], DangerBox.GetVertices())) 
       { 
        return true; 
       } 
       zaehler++; 
      } 
     } 
    } 
    return false; 
} 

不幸的是,if (DangerAreas.Contains(HandAreas[zaehler])==true)根本不起作用。

有誰知道這是爲什麼?

+2

這看起來像C#,而不是C++進行比較。您正在使用錯誤的標籤。 – Eugene 2012-03-19 15:32:30

+0

我不是C#不太好,但在。載VB通常是絃樂,不知道這是否是在C#中的相同,而且,檢查是否「DangerArea」!=什麼。 – user959631 2012-03-19 16:01:49

回答

1

System.Collections.Generic.List<t>.Contains檢查是否且僅當該列表包含確切元素。這在實踐中幾乎不會發生。它看起來像你真的想檢查區域的交集或包含。 (你可以用一個簡單的Linq查詢來做到這一點)

0

嘗試使用Linq的.Any(),你可以使用任何表達式來找出它是否包含某些具有某些屬性的對象。

1

你應該實現IEquatable接口和重載的Equals(T等)的方法,所以現在編譯器知道在做的時候contains()方法,其字段必須進行比較。

public class MCvBox2D:IEquatable<MCvBox2D> 
    { 
    .............. 

    private override bool Equals(MCvBox2D other) 
    { 
     if(this.fieldName==other.fieldName) 
      return true; 
    } 

    .............. 
    } 

注:與現場替換fieldName要通過

相關問題