如何在if语句中使用变量作为Rect2D结构的成员?

时间:2019-04-15 13:53:18

标签: c++ variables artificial-intelligence member game-development

我正在计算机编程课程中学习人工智能作为模块,我的任务之一是编写有效的避障转向行为代码。我一直通过示例使用Matt Bucklands编程游戏AI来帮助我,但是我使用的框架却有很大不同。与其使用检测盒,不如使用探测器,因此它比“避障”更接近“避壁”功能。我有一个PointInBox函数,而不是LineIntersection函数,它具有一个Vector2D(触角)和一个Rect2D(障碍物)。代码遍历障碍物的大小,并检测该点是否发生碰撞。

检测到碰撞后,将计算出转向力以将特工推离障碍物

我遇到的问题是,我不知道我是否在PointInBox参数中使用了正确的变量,并且由于我不知道如何有效地使用Rect2D结构,所以无法计算转向力。

我尝试将不同的值附加到Rect2D变量“障碍”上,但我需要获取ClosestObstacle并将其在Rect2D周围进行规范化(我现在真的不知道如何写出我要解决的问题入门/中级编程方面的知识。

Vector2D w019435fSteeringBehaviours::ObstacleAvoidance(Rect2D obstacles)
{
    CreateFeelers();

    double DistToThisIP = 0.0;
    double DistToClosestIP = MaxDouble;

    ObstacleManager* Obstacle;

    int ClosestObstacle = -1;

    Vector2D SteeringForce, Point, ClosestPoint;

    for (unsigned int flr = 0; flr < feelers.size(); ++flr)
    {
        for (unsigned int o = 0; o < Obstacle->GetObstacles().size(); ++o)
        {           
            if(PointInBox(feelers[flr], obstacles))
            {
                if (DistToThisIP < DistToClosestIP)
                {
                    DistToClosestIP = DistToThisIP;

                    ClosestObstacle = o;

                    ClosestPoint = Point;
                }
            }
        }

        if (ClosestObstacle >= 0)
        {
            Vector2D Projection = feelers[flr] - ClosestPoint;

            SteeringForce =  obstacles.normal * Projection.Length();
        }
    }
    return SteeringForce;
}

我认为ClosestObstacle是至关重要的,必须成为障碍物的一部分,然后对其进行标准化并乘以投影长度。但是我无法让任何成员陷入障碍。

非常感谢您的帮助。

0 个答案:

没有答案