C# 如何在特定位置检查对象?

C# 如何在特定位置检查对象?,c#,xna,xna-4.0,C#,Xna,Xna 4.0,我有一个黑色的目标框,用于检查它覆盖的区域是否存在块对象,例如左上角的灰色对象,如果该位置有块,则返回布尔值。 这是一个平铺系统,我已经包括了一个返回“false”和一个返回“true”的例子 我知道我可以做类似的事情 public bool checkTargetObjects() { if(block.x == target.x && block.y == target.y) { return true; } else

我有一个黑色的目标框,用于检查它覆盖的区域是否存在块对象,例如左上角的灰色对象,如果该位置有块,则返回布尔值。 这是一个平铺系统,我已经包括了一个返回“false”和一个返回“true”的例子

我知道我可以做类似的事情

public bool checkTargetObjects()
{
    if(block.x == target.x && block.y == target.y) 
    {
        return true;
    }
    else
    {
    return false;
    }
}

但我不确定如何在该位置查找块对象。如何执行此操作?

您可以创建一个比较双精度函数,如

  const THRESH = 1e-3; // define as desired for your application
   public bool compareDoubles(double a1, double a2)
   {
      if( fabs(a1-a2) < THRESH)
          return true;
     else
          return false;
   }
const THRESH=1e-3;//根据应用程序的需要定义
公共布尔比较双倍(双a1,双a2)
{
if(晶圆厂(a1-a2)<脱粒)
返回true;
其他的
返回false;
}
这就允许只获得精确匹配,这对于多布勒来说是罕见的!
然后在每个对象的x和y维度上使用该函数(如果有人使用3D,则使用z)。如果每个尺寸的公差存在显著差异,甚至可以将THRESH设置为参数。

将该数据保存为一个参数,而不是存储分幅的X和Y位置。你唯一需要的是瓷砖的宽度和高度(在某些地方应该是一个常数)

因此,与其

public class Block 
{
    public int X { get; set; }
    public int Y { get; set; }
}
你可以

public class Block 
{
    public Rectangle Area { get; set; }
}
然后,您可以获取所有块(假设您在名为
块的
列表中获得了所有块),并对它们进行迭代,以查看哪个块与目标相交:

var blocksInTarget = blocks.Where(b => b.Area.Intersects(target.Area));
其中,
区域
是矩形

如果您只想知道是否有矩形(而不是哪个矩形),可以使用
Any
更改
Where
,您可以将其理解为“如果有任何块与我的目标相交,则返回true”:


所以你可以检查一个物体是否存在于某个特定的位置,你是在问如何检查一个“块”是否也存在于该位置吗?不,我还没有。我在问如何检查x,y位置是否有东西。块更多地用于上下文,而不是用于平铺的X和Y位置,使用矩形对象。然后你就可以做rect1.Intersect(rect2)我使用的是矩形对象,你建议的看起来非常有用!像targetBox.Intersect(blockBox),但我遇到的问题是,我正在检查任何块,而不仅仅是一个特定的块。像targetBox.Intersect(任何blockBox)谢谢,这真的帮我弄明白了。我定义了交叉点,我想我们会没事的:D@PepperTheDog“我定义了相交”-没有必要为相交编写实现。只需使用Pierre Luc提到的XNA在
矩形中提供的一个。
bool isBlockPresent = blocks.Any(b => b.Area.Intersects(target.Area));