2012-03-19 76 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要通过

相关问题