C# 如何检查游戏对象是否在特定半径内?

C# 如何检查游戏对象是否在特定半径内?,c#,xna,range,collision-detection,geometry,C#,Xna,Range,Collision Detection,Geometry,与玩家相比,我很难检查游戏对象是否在特定半径内 我的游戏对象包含一个半径,我想用它来检查,但我失败了 这就是我到目前为止所做的: public bool IsInRange(Vector2 currentTarget) { if ((currentTarget.X >= PosX - BRadius && currentTarget.Y >= PosY - BRadius) || // left up (currentTarget.X >

与玩家相比,我很难检查游戏对象是否在特定半径内

我的游戏对象包含一个半径,我想用它来检查,但我失败了

这就是我到目前为止所做的:

public bool IsInRange(Vector2 currentTarget)
{

    if ((currentTarget.X >= PosX - BRadius && currentTarget.Y >= PosY - BRadius) || // left up
        (currentTarget.X >= PosX - BRadius && currentTarget.Y <= PosY + BRadius) || // left down
        (currentTarget.X >= PosX + BRadius && currentTarget.Y >= PosY + BRadius) || //right up
        (currentTarget.X >= PosX + BRadius && currentTarget.Y <= PosY - BRadius)) //right down
    {
        return true;
    }
    return false;
}
public bool IsInRange(向量2 currentTarget)
{
if((currentTarget.X>=PosX-BRadius&¤tTarget.Y>=PosY-BRadius)|//
(currentTarget.X>=PosX-BRadius&¤tTarget.Y=PosX+BRadius&¤tTarget.Y>=PosY+BRadius)| |//右上

(currentTarget.X>=PosX+BRadius&¤tTarget.Y您正在混合您的X和Y

检查currentTarget.X在PosX的左右极端之间,而不是左上方。这样想会让我头疼

我将用伪代码来充实这一点

if(
  (target.x > my.x -radius && target.x < my.x +radius) &&
  (target.y > my.y -radius && target.y < my.y +radius)
){ ... }
if(
(target.x>my.x-radius&&target.xmy.y-半径和&target.y
请注意,这会检查边界框,严格来说不是半径。但在许多情况下,这就足够了

因此,最终应该是:

if (currentTarget.X > PosX - BRadius && currentTarget.X < PosX + BRadius) &&
   (currentTarget.Y > PosY - BRadius && currentTarget.Y < PosY + BRadius)
        { return true; }
if(currentTarget.X>PosX-BRadius&¤tTarget.XPosY-BRadius和¤tTarget.Y
我过去用它来确定游戏对象是否靠近玩家对象。我们可以用它来返回一个浮点数,并由此检查游戏对象是否在某个半径内

如果你特别想看看一个游戏对象是否是玩家的右上角、左下角等等,那么很遗憾,这并没有多大帮助

就问题而言:

public bool IsInRange(Vector2 currentTarget) {
    Vector2 yourPos = new Vector2(PosX, PosY);
    return BRadius >= Vector2.Distance(yourPos, currentTarget);
}
根据(这是一个关于球体探测的冗长讨论)
你应该只检查x到你的圆环中心的距离。如果距离大于半径,你就可以了。只要解出
(x2-x1)^2+(y1-y2)^2我使用了这个,但这并不能解决问题,例如:如果玩家的位置是400250,AI的位置是200200。你可以稍微向上移动玩家的位置,它在Y范围内,所以它在范围内。但是它也应该检查它是否在范围内,如果它在伪代码中用and替换了OR,那么现在当你是wi时它就会触发缩小x和y边界。这或srm的答案应该是可接受的答案。我添加了一个代码示例。当前可接受的答案检查目标周围是否有正方形,而不是半径所表示的圆形。