C# 如何检查wp7 XNA触控事件是否在定义的矩形内

C# 如何检查wp7 XNA触控事件是否在定义的矩形内,c#,windows-phone-7,xna,C#,Windows Phone 7,Xna,我想检查用户单击是否在我定义的一组重角内,但我是否应该用另一种方法进行检查 这就是我现在拥有的,但我不知道如何比较矩形对象和触摸对象 private bool CheckEnemyClicked(Vector2 vector2, out Enemy enemyOut) { TouchCollection touches = TouchPanel.GetState(); foreach (Enemy enemy in enemies) { //Find t

我想检查用户单击是否在我定义的一组重角内,但我是否应该用另一种方法进行检查

这就是我现在拥有的,但我不知道如何比较矩形对象和触摸对象

private bool CheckEnemyClicked(Vector2 vector2, out Enemy enemyOut)
{
    TouchCollection touches = TouchPanel.GetState();

    foreach (Enemy enemy in enemies)
    {
        //Find the rectangle of the sprite
        Rectangle rectangle = new Rectangle(
                                  (int)enemy.Position.X, 
                                  (int)enemy.Position.Y, 
                                  enemy.Width, 
                                  enemy.Height);

        //Check if click is hitting enemy
        if(touchinput is within rectangle)
        {
            enemyOut = enemy;
            return true;
        }
    }
    enemyOut = null;
    return false;
}

TouchCollection
是触摸点的集合(因为用户可能在多个位置触摸屏幕)。您应该检查
TouchCollection
中的各个触摸点,并找到它们相对于您的敌人矩形的位置。

TouchCollection
是触摸点的集合(因为用户可能在多个位置触摸屏幕)。您应该检查
TouchCollection
中的各个接触点,并找到它们相对于您的敌人矩形的位置。

TouchCollection返回一个包含“位置”成员的TouchLocation对象集合。矩形有一个Contains方法,该方法有一个重载,可以检查某个特定点是否包含在其中。因此,XNA框架为您完成了所有艰巨的工作

对于触摸的碰撞检查部分,您的代码看起来像这样

//Check if click is hitting enemy
foreach (TouchLocation location in collection)
{
     if (rectangle.Contains((int)location.Position.X, (int)location.Position.Y))
     {
          enemyOut = enemy;
          return true;
     }
}

TouchCollection返回具有“位置”成员的TouchLocation对象的集合。矩形有一个Contains方法,该方法有一个重载,可以检查某个特定点是否包含在其中。因此,XNA框架为您完成了所有艰巨的工作

对于触摸的碰撞检查部分,您的代码看起来像这样

//Check if click is hitting enemy
foreach (TouchLocation location in collection)
{
     if (rectangle.Contains((int)location.Position.X, (int)location.Position.Y))
     {
          enemyOut = enemy;
          return true;
     }
}

所以做一个for循环,检查所有的点?这将是10000(100x100像素)操作每个精灵我正在检查,这不是一个问题,如果我有10-20个精灵在屏幕上,这样做30次每秒?你需要某种场景管理。我想到了一个四叉树,这对于动画对象来说可能很困难。但你也只需要检查所有可见的物体,屏幕上没有的东西是不能触摸的。现在,您只需迭代所有用户触摸,对四叉树单元格中的可见对象进行测试,并将测试减少到最小。当然,如果你确定这个特殊的触摸是在sprite rect中,你只需要测试每个像素。那么做一个for循环并检查所有的点?这将是10000(100x100像素)操作每个精灵我正在检查,这不是一个问题,如果我有10-20个精灵在屏幕上,这样做30次每秒?你需要某种场景管理。我想到了一个四叉树,这对于动画对象来说可能很困难。但你也只需要检查所有可见的物体,屏幕上没有的东西是不能触摸的。现在,您只需迭代所有用户触摸,对四叉树单元格中的可见对象进行测试,并将测试减少到最小。当然,如果您确保这个特定的触摸在sprite rect中,那么您只能测试每个像素。