Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BOX2D触点(iTouching)问题_C#_Xna_Box2d - Fatal编程技术网

C# BOX2D触点(iTouching)问题

C# BOX2D触点(iTouching)问题,c#,xna,box2d,C#,Xna,Box2d,这是我的问题 形象 我想检查球是否接触,这样效果很好。然而,有时带箭头的球没有被捡起,这当然是有道理的,因为它没有碰到任何东西。然而,我想给一点空间,这样如果一个球在4像素/0.001m之外,它应该被认为是接触的。那么,我将如何着手实施它呢。我看了一下iTouching代码,下面是我能想到的 var b1 = body1; var b2 = body2; Transform xf; Transform xf2; b1.GetTransform(out xf); b2.Ge

这是我的问题 形象

我想检查球是否接触,这样效果很好。然而,有时带箭头的球没有被捡起,这当然是有道理的,因为它没有碰到任何东西。然而,我想给一点空间,这样如果一个球在4像素/0.001m之外,它应该被认为是接触的。那么,我将如何着手实施它呢。我看了一下iTouching代码,下面是我能想到的

     var b1 = body1;
var b2 = body2;

 Transform xf;
 Transform xf2;

  b1.GetTransform(out xf);
b2.GetTransform(out xf2);


var touching = AABB.TestOverlap(b1.GetFixtureList().GetShape(), b2.GetFixtureList().GetShape(), ref xf, ref xf2);

 if (!touching)
 continue;

我仍然需要测试远处是否有球,我不知道我能做什么。

不知道你们所有的课程是什么,很难给出准确的答案。但是,一般原则是增加你检查的范围。例如,如果形状是半径为n的圆,则在检查碰撞时,可以使用半径为n+2的圆。请注意,您仍然使用n的半径绘制圆。您只需使用增加的半径进行碰撞检测


类似地,使用AABB时,需要将边界增加几个像素。你如何做到这一点取决于你的课程如何运作。

如果不知道你所有的课程是什么,很难给出准确的答案。但是,一般原则是增加你检查的范围。例如,如果形状是半径为n的圆,则在检查碰撞时,可以使用半径为n+2的圆。请注意,您仍然使用n的半径绘制圆。您只需使用增加的半径进行碰撞检测


类似地,使用AABB时,需要将边界增加几个像素。你如何做到这一点将取决于你的课程如何运作。

如果你增加圆形的半径,那么他们的AABBs也应该更新。无需手动增加其大小。如果增加圆形的半径,则其AABBs也应更新。无需手动增加其大小。