我有一个黑色的targetBox,用于检查它所覆盖的区域是否存在Block对象,例如左上角的灰色对象,如果该位置有Block,则返回一个布尔值。 它是一个瓷砖系统,我已经包含了一个案例,它将返回" false"并且会返回" true"。
我知道我可以做类似
的事情public bool checkTargetObjects()
{
if(block.x == target.x && block.y == target.y)
{
return true;
}
else
{
return false;
}
}
但我不确定如何在该位置查找Block对象。我怎么能这样做?
答案 0 :(得分:2)
不是存储切片的X和Y位置,而是将该数据保存为Rectangle
。你需要的唯一额外的东西是你的瓷砖的宽度和高度(在某处应该是一个常数)。
所以没有
public class Block
{
public int X { get; set; }
public int Y { get; set; }
}
你可以
public class Block
{
public Rectangle Area { get; set; }
}
然后你可以把你所有的块(让我们说你把它们全部放在一个叫List<Block>
的{{1}}中)并迭代它们以查看哪一块与你的目标相交:
blocks
其中var blocksInTarget = blocks.Where(b => b.Area.Intersects(target.Area));
是你的矩形。
如果您只想知道是否有矩形(而不是哪个),您可以将Area
更改为Where
,您可以将其读作&#34;如果有,则返回true是任何与我的目标相交的块#34; :
Any
答案 1 :(得分:0)
您可以创建比较双重功能,如
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;
}
这允许容忍度仅获得完全匹配,这对于dobules来说是罕见的! 然后,您将在每个对象的x和y维度上使用该函数(如果有人使用3D,则使用z)。如果每个维度的容差存在显着差异,您甚至可以将THRESH作为参数。