如何检查wp7XNA触摸事件是否在定义的矩形内

本文关键字:定义 是否 事件 触摸 何检查 检查 wp7XNA | 更新日期: 2023-09-27 18:24:05

我想检查用户点击是否在我定义的一组重新标记中,但我应该用另一种方式来进行检查吗?

这就是我现在所拥有的,但我怀疑如何将矩形对象与触摸对象进行比较

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

如何检查wp7XNA触摸事件是否在定义的矩形内

TouchCollection返回一个具有"Position"成员的TouchLocation对象集合。Rectangle有一个Contains方法,它有一个重载,可以检查其中是否包含特定的点。所以XNA框架为您做了所有的艰苦工作。

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

//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是触摸点的集合(因为用户可能在多个地方触摸屏幕)。你应该检查TouchCollection内的各个触摸点,并找到这些触摸点相对于你的敌人矩形的位置。